Что делает: $ {параметрический усилитель: = значение} средний?

От/www.vrplumber.com/programming/runsnakerun/существует также этот прохладный сценарий Python

bzr branch lp:~mcfletch/squaremap/trunk squaremap

Это не является самым многофункциональным, но это выполняется из единственного сценария Python, таким образом, это чрезвычайно портативно.

alt text

34
27.11.2011, 01:59
3 ответа

Давайте разломаем это на части.

Этот код выполняет команду : с некоторыми аргументами. Команда : ничего не делает и игнорирует его аргументы. Поэтому целая командная строка делает ничего, кроме любых побочных эффектов не происходит в аргументах.

Синтаксис ${parameter_name:=value} существует во всех нестаринных оболочках стиля Границы, включая пепел, удар, ksh и zsh. Это устанавливает параметр на значение по умолчанию при необходимости. Это эквивалентно

if [ -z "$parameter_name" ]; then parameter_name=value; fi
… ${parameter_name}

Другими словами, если parameter_name не установлен или установлен на пустое значение, затем устанавливает его на указанное значение; и затем выполненный команда, с помощью нового значения параметра. Существует вариант, ${parameter_name=value}, который оставляет параметр пустым, если это было пусто, только с помощью указанного значения, если параметр был сброшен.

Вы найдете этот синтаксис зарегистрированным при “расширении параметра” в спецификацию POSIX, и тире, удар, ksh и zsh руководства.

Существуют вариации на этот синтаксис в особенности ${parameter_name:-value} которые позволяют Вам использовать значение по умолчанию для этого расширения только, не присваивая параметру.

Таким образом, : ${parameter_name:=value} краткий способ записать

if [ -z "$parameter_name" ]; then parameter_name=value; fi
31
27.01.2020, 19:37

: не означает верный - Вы, вероятно, думаете while :, но даже в том выражении это не означает "верный", это просто происходит, оценивают к нему (на самом деле, это - просто пустая команда или noop).

Это расширение параметра (${x:=y}) означает, "присваивают y x, если x сброшен или пуст, и расширяться до y".

$ echo "${foo:=bar}"
bar
$ foo=baz
$ echo "${foo:=bar}"
baz
$ foo=
$ echo "${foo:=bar}"
bar
$ echo "${foo}"
bar

У Хакеров Bash Wiki есть хорошая статья о расширении параметра здесь.

Причина это : используется то, так, чтобы, пока другие части команды оценены, на них не реагировали (как : пустая команда). Таким образом Вы имеете ${x:=y} выполните его функцию, не влияя ни на что больше, например, если Вы не имели : вначале, это попыталось бы выполнить команду, названную y.

Вот bashстраница справки на ::

:: :
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.
11
27.01.2020, 19:37

Первое : команда, она назвала "noop" или "никакую операцию". Как сказано в странице справочника, это часто используется для оценки аргументов.

Второе : спецификатор в переменном расширении - технически это :=. Который, как сказано, это устанавливает значение, если оно не имеет значения.

Мудрый идиомой при необходимости в значении по умолчанию переменной среды, затем можно использовать этот синтаксис. Например, при прокручивании программы cron(8), среда не установлена и и точечные файлы оболочки не выполняются. Таким образом, Вы, возможно, должны установить некоторые значения по умолчанию.

: ${JAVA_HOME:=/usr/local/jdk-1.6.0_28}

Затем можно 'установить его и забыть его' (пока значение по умолчанию jvm изменения).

3
27.01.2020, 19:37

Теги

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