Подтвердить что ты не робот

Bash для встроенной команды

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

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

1), используя тики или акцент char

command `sub command`

или

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

command $(sub command)

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

4b9b3361

Ответ 1

Нет никакой разницы, кроме "nestability":

$() является гнездовым:

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

в то время как `` is not.

Ответ 2

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

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

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

Ответ 3

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

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

Это немного облегчает вложение $(...), например. Тем не менее, нет никакой разницы.

Ответ 4

Цитата из http://tldp.org/LDP/abs/html/commandsub.html:

  • Форма подстановки команд $(...) рассматривает двойную обратную косую черту иначе, чем `...`.
  • Форма командной строки $(...) разрешает вложенность

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

Ответ 5

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