$ echo $(date)
Thu Jul 2 16:33:11 SGT 2015
$ echo ${date}
$ name=foo
$ echo $(name)
ksh: name: not found
$ echo ${name}
foo
Похоже, $ {variable} совпадает с $ variable. в то время как $ () должен выполнить команду. Зачем тогда использовать $ {}?
${
variable_name
}
Ответы:
$(command)
это «подстановка команд». Как вы, кажется, понимаете, он запускаетcommand
, захватывает свои выходные данные и вставляет их в командную строку, содержащую$(…)
; например,${parameter}
это «подстановка параметров». Много информации можно найти на странице руководства оболочки bash (1) под заголовком « Расширение параметров »:Позиционные параметры см. В разделе « Позиционные параметры » ниже. В его наиболее распространенном использовании, как показано в других ответах,
parameter
это имя переменной.${…}
Форма, как указано в конце предыдущего абзаца, позволяет получить значение переменной (то есть ) и следовать за ним сразу же с буквой, цифрой или подчеркиванием:$variable_name
Вы также можете сделать это с кавычками:
Или, в качестве упражнения в опциях, вы можете использовать вторую переменную:
Но это всего лишь шаг 1. Следующий абзац на странице руководства интересен, хотя и немного загадочно:
Я не уверен, как я могу сделать это понятнее, кроме как на примере:
Итак, давайте назовем этот шаг 1½. Есть много интересных вещей, которые вы можете сделать на шаге 2:
Вы не можете делать ничего из этого без
{
...}
фигурных скобок.Позиционные параметры
Рассмотрим этот искусственный пример:
потому что оболочка не понимает
$10
,$11
и т.д. трактует ,$10
как если бы оно было${1}0
. Но это понимает${10}
,${11}
и т.д., как указано в справочной странице ( «позиционный параметр с более чем одной цифрой»).Выше (наряду со многими другими формами конструкций) более подробно обсуждается в справочной странице оболочки, bash (1) .
${parameter…something_else}
Примечание к цитатам
Обратите внимание, что вы всегда должны заключать в кавычки переменные оболочки, если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете. Напротив, хотя фигурные скобки могут быть важны, они не так важны, как кавычки.
Это также относится к позиционным параметрам (т. Е. Аргументам командной строки; например,
"$1"
), а также подстановке команд:См. Цитаты Bash без экранирования при подстановке команд для краткого трактата о взаимодействии между кавычками и
$(
…)
.источник
!
.${!animal}
на самом деле ссылается на переменную,$cat
а не на значение cat». Да, в этом-то и дело. «Как / at становится« c »в echo $ {animal / at / ow}?» А? / at не становится "c"; «Кошка» становится «коровой», когда «у» заменяется на «ау».В вашем примере $ var и $ {var} идентичны. Однако фигурные скобки полезны, когда вы хотите раскрыть переменную в строке:
Таким образом, фигурные скобки обеспечивают возможность замены переменной, чтобы получить имя новой переменной, которая сама должна быть заменена.
источник
Я обычно вижу это чаще в строках. Как то так не получится
Но это будет:
Как вы правильно сказали,
$()
используется для выполнения команды:Вы также можете использовать обратные пометки, но я считаю
$()
более универсальным. Во-первых, обратные метки не могут быть (легко) вложенными.источник
date_directory=`ls \`date '+%Y-%m-%d'\``
. Но это ужасно уродливо;$(…)
гораздо понятнее и проще в использовании.`…`
был (только) синтаксис для подстановки команд в течение многих лет , прежде чем был изобретен, так что вам не нужно представить ничего - люди сделали это.$(…)