Разница между фигурными скобками {} и скобками () в сценариях оболочки

Мы используем фигурные скобки {} для выражения переменной, например

NAME="test"

FILE_NAME=${NAME}file

Но я не понимаю, в каких сценариях мы используем скобки () Допустим, nslookup $(hostname) работает только с () скобками.

Может кто-нибудь объяснить?


person Satheesh    schedule 07.05.2015    source источник
comment
В американском английском это: () — круглые скобки, а эти: [] — скобки.   -  person Keith Thompson    schedule 07.05.2015


Ответы (2)


Сначала мелкие придирки:

  • Кронштейны []
  • Скобки ()
  • Брекеты {}
  • (Двойные) Кавычки ""
  • (Одиночные) Кавычки (апострофы) ''
  • Обратные кавычки `` (то же, что и клавиша тильда ~)

Фигурные скобки используются в сценариях BASh для раскрытия сложных переменных. Рассмотрим конкатенацию строк:

STR="hello"
STR2=$STR

STR2 оценивается как "привет". Что, если вы хотите сделать что-то вроде «helloWorld». Выполнение чего-то вроде STR2="$STR2World" не сработает, поэтому вы используете фигурные скобки, например: STR2="${STR}World".

Что касается квадратных скобок, они используются, как и обратная кавычка, `, которая расширяет текст между ними как текст, выводимый командой.

Что, если вы хотите сохранить текущее время в виде строки?

STR2=$(date)

Теперь STR2 хранит строку «Чт, 7 мая, 09:32:06 PDT 2015».

Кроме того, вы можете использовать круглые скобки для выполнения чего-либо в подоболочке,< /a>, что потенциально повлияет на вашу среду, PID и т. д. Очень полезно для случаев, когда вам нужна «одноразовая» среда с необходимостью отслеживать/восстанавливать переменные среды, каталоги через pushd/popd вместо cd и т. д.

person Cloud    schedule 07.05.2015
comment
Я полагаю, что эти () обычно называют скобками в британском английском. - person Keith Thompson; 08.05.2015
comment
Если вы собираетесь придираться, то обратные кавычки не совпадают с клавишей тильды на всех раскладках клавиатуры. Не каждый программист использует английскую клавиатуру, так как во многих странах есть свой стандарт. - person Gemtastic; 11.01.2017
comment
@Gemtastic Учитывая, что английский язык является общепринятым все сайты SE, я думаю, что справедливо предположить, что клавиатура на английском языке. - person Cloud; 12.01.2017
comment
На самом деле это не так, поскольку английский язык является международным языком. Каждый язык на основе латиницы (известный мне) может печатать по-английски без необходимости менять клавиатуру. - person Gemtastic; 12.01.2017
comment
@Gemtastic Мы должны начать метапост о клавиатурах US/101 (и их производных), являющихся стандартами де-факто среди основной аудитории SO или, по крайней мере, в самом большом поперечном сечении сообщества SO. - person Cloud; 12.01.2017
comment
Мне немного проще думать о ${foo} как о каноническом способе расширения параметров, а $foo является примером особого случая, когда фигурные скобки можно опустить, что не создает двусмысленности. . - person chepner; 28.07.2017
comment
@chepner Хороший вопрос. Я лично использую фигурную скобку, которую вы описали как стандартную по привычке. Легче кодировать, когда стиль последователен. - person Cloud; 28.07.2017

Использование скобок ( что-то выполняет. Так случилось, что есть программа с именем hostname, поэтому $(hostname) выполнит ее.

попробуйте which hostname посмотреть, где находится эта программа

person Vic    schedule 07.05.2015