Ответ 1
Нет никакой разницы, кроме "nestability":
$()
является гнездовым:
$ echo $(echo "hi" $(echo "there"))
в то время как `` is not.
Мне нужно запускать команды в bash script, и в этом bash script мне нужно запустить другие команды. Я запускаю CentOS.
Я нашел 2 способа сделать это в блогах и руководствах:
1), используя тики или акцент char
command `sub command`
или
2), используя знак доллара и круглые скобки
command $(sub command)
В чем разница между 2 и какая из них предпочтительнее?
Нет никакой разницы, кроме "nestability":
$()
является гнездовым:
$ echo $(echo "hi" $(echo "there"))
в то время как `` is not.
Другие указали на разницу в синтаксисе (в основном, $()
немного чище wrest nesting и escapes), но никто не упомянул о том, что я считаю более важным отличием: $()
намного легче читать. Это не похоже на одиночные кавычки (что означает нечто совершенно другое), а разделители открытия и закрытия различаются, что упрощает визуальное различение его содержимого.
Для ваших собственных скриптов это может быть не очень важно; читаемость кода хороша, но функциональность важнее. Но для тех, кто пишет учебники, примеры кода, ответы на stackoverflow и т.д., Читаемость гораздо важнее. Люди вводят одиночные кавычки вместо backquotes при вводе примеров и т.д., А затем путают, когда они не работают должным образом.
Итак, для всех, кто пишет примеры в stackoverflow: пожалуйста, сохраните читателям некоторые проблемы и всегда используйте форму $()
.
$(...)
и обратные такты очень похожи. Единственная разница между ними - это некоторые детали того, какие специальные символы заменяются в них; руководство объясняет лучше, чем я мог:
Когда используется форма замещения в стиле старого образца, обратная косая черта сохраняет свое буквальное значение, за исключением случаев, когда следуют $, `, или. Первый backquote, которому не предшествует обратная косая черта, завершает замену команды. При использовании формы $(command) все символы между круглыми скобками составляют команду; ни один из них не рассматривается специально.
Это немного облегчает вложение $(...)
, например. Тем не менее, нет никакой разницы.
Цитата из http://tldp.org/LDP/abs/html/commandsub.html:
Надеюсь, это поможет!
Я должен согласиться с Гордоном в том, что $() является более чистым. Я боролся в течение 2 часов, редактируя мой .bash_profile, чтобы добавить завершение homebrew bash, чтобы найти, что я должен был использовать `и не '.