Где место владеет значками приложения? Как получить текущие значки темы?

Когда они не заключаются в кавычки, $* и $@ то же. Вы не должны использовать или их, потому что они могут повредиться неожиданно, как только у Вас есть аргументы, содержащие пробелы или подстановочные знаки.


"$*" расширяется до отдельного слова "$1c$2c...". Обычно c пространство, но это - на самом деле первый символ IFS, таким образом, это может быть что-либо, что Вы выбираете.

Единственное хорошее использование, которое я когда-либо находил для него:

споры соединения с запятой (простая версия)

join1() {
    typeset IFS=,
    echo "$*"
}

join1 a b c   # => a,b,c

споры соединения с указанным разделителем (лучшая версия)

join2() {
    typeset IFS=$1   # typeset makes a local variable in ksh (see footnote)
    shift
    echo "$*"
}

join2 + a b c   # => a+b+c

"$@" расширяется для разделения слов: "$1" "$2" ...

Это почти всегда, что Вы хотите. Это разворачивает каждый позиционный параметр до отдельного слова, которое делает это идеально подходящим для принятия параметров командной строки или аргументов функции и затем передачи их к другой команде или функции. И потому что это разворачивает двойные кавычки использования, это означает, что вещи не повреждаются если, скажем, "$1" содержит пространство или звездочку (*).


Давайте запишем названный сценарий svim это работает vim с sudo. Мы сделаем три версии для иллюстрирования различия.

svim1

#!/bin/sh
sudo vim $*

svim2

#!/bin/sh
sudo vim "$*"

svim3

#!/bin/sh
sudo vim "$@"

Все они будут хорошо для простых случаев, например, единственного имени файла, которое не содержит пробелы:

svim1 foo.txt             # == sudo vim foo.txt
svim2 foo.txt             # == sudo vim "foo.txt"
svim2 foo.txt             # == sudo vim "foo.txt"

Но только $* и "$@" работайте правильно, если у Вас есть несколько аргументов.

svim1 foo.txt bar.txt     # == sudo vim foo.txt bar.txt
svim2 foo.txt bar.txt     # == sudo vim "foo.txt bar.txt"   # one file name!
svim3 foo.txt bar.txt     # == sudo vim "foo.txt" "bar.txt"

И только "$*" и "$@" работайте правильно, если у Вас есть аргументы, содержащие пробелы.

svim1 "shopping list.txt" # == sudo vim shopping list.txt   # two file names!
svim2 "shopping list.txt" # == sudo vim "shopping list.txt"
svim3 "shopping list.txt" # == sudo vim "shopping list.txt"

Так только "$@" будет работать правильно все время.


typeset то, как сделать локальную переменную в ksh (bash и ash использовать local вместо этого). Это означает IFS будет восстановлен его предыдущему значению, когда функция возвратится. Это важно, потому что команды, которые Вы выполняете позже, не могли бы работать правильно если IFS установлен на что-то нестандартное.

1
29.01.2013, 12:27
1 ответ

Значки находятся в/usr/share/icons, но корректный способ получить их зависит того, какие библиотеки - Вы использование, если PyQt существует метод для получения значка от текущей темы.

Проверьте это: https://stackoverflow.com/questions/12805036/qicon-fromtheme-not-displaying-icon-in-pyqt

Если Вы используете gtk, я предполагаю, что существует альтернатива, это - то, что говорит Google:

http://www.pygtk.org/docs/pygtk/class-gtkicontheme.html

0
28.01.2020, 02:08

Теги

Похожие вопросы