Баш для встроенной команды - PullRequest
21 голосов
/ 29 декабря 2011

Мне нужно запускать команды, в bash-скрипте, а внутри этого bash-скрипта мне нужно запускать другие команды. Я использую CentOS.

Я нашел 2 способа сделать это в блогах и руководствах:

1) используя галочки или символы акцента

command `sub command`

или

2) используя знак доллара и скобки

command $(sub command)

В чем разница между 2 и какой предпочтительнее использовать?

Ответы [ 5 ]

37 голосов
/ 29 декабря 2011

Нет никакой разницы, кроме как в «нестабильности»:

$() является вложенным:

$ echo $(echo "hi" $(echo "there"))

, а `` нет.

5 голосов
/ 29 декабря 2011

Другие отметили разницу в синтаксисе (в основном, $() немного чище по сравнению с вложенностью и ускользает), но никто не упомянул о том, что я считаю более важным различием: $() гораздо легче читать. Он не похож на одинарные кавычки (что означает что-то совершенно другое), а открывающий и закрывающий разделители различаются, что облегчает визуальное различение его содержимого.

Для ваших собственных скриптов это может быть не очень критично; удобочитаемость кода хорошая, но функциональность важнее. Но для любого, кто пишет учебные пособия, примеры кода, ответы на вопросы о стековом потоке и т. Д., Удобство чтения намного важнее. Люди будут вводить одинарные кавычки вместо обратных кавычек при вводе примеров и т. Д., А затем запутываются, когда они не работают должным образом.

Так что для всех, кто пишет примеры на stackoverflow: пожалуйста, избавьте своих читателей от проблем и всегда используйте форму $().

2 голосов
/ 29 декабря 2011

$(...) и backticks очень похожи. Единственное различие между ними состоит в том, что в них подставляются специальные символы; руководство объясняет лучше, чем я мог:

Когда используется форма замещения в старом стиле, обратная косая черта сохраняет свое буквальное значение, за исключением случаев, когда следуют $, `или. Первая обратная кавычка, которой не предшествует обратная косая черта, завершает подстановку команды. При использовании формы $ (команда) все символы в скобках составляют команду; никто не лечится специально.

Это, например, немного упрощает вложение $(...). Помимо этого, однако, нет никакой разницы.

1 голос
/ 29 декабря 2011

Цитирование из http://tldp.org/LDP/abs/html/commandsub.html:

  1. Форма подстановки команд $ (...) обрабатывает двойной обратный слеш иначе, чем `...`.
  2. Форма подстановки команд в $ (...) позволяет вкладывать

Надеюсь, это поможет!

0 голосов
/ 12 октября 2013

Я должен согласиться с Гордоном в том, что $ () намного чище.Я изо всех сил пытался в течение 2 часов редактировать свой файл .bash_profile, чтобы добавить завершение homebrew bash, только чтобы найти, что я должен был использовать `а не '.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...