В скриптах bash лучше ли использовать скобки вместо обратных кавычек?

227
alle_meije

Когда я научился писать сценарии bash, я поместил вывод команды в переменную с помощью обратных кавычек, например :

ALLPDFS=`find . -name \*.\[pP\]\[dD\]\[fF\]` 

но большинство «официальных» скриптов (скачанных в пакетах Linux и т . д.) используют обозначения со знаком доллара и скобками:

ALLPDFS=$(find . -name \*.\[pP\]\[dD\]\[fF\]) 

Будет ли веская причина выбрать одно из другого? Я полагаю, что второе более соответствует другому синтаксису bash. Для времени, хотя я пытался

time for (( i=0; i<10; i++ )); do a=`find . -name \*.\[pP\]\[dD\]\[fF\]`; done time for (( i=0; i<10; i++ )); do a=$(find . -name \*.\[pP\]\[dD\]\[fF\]); done 

и это не имеет никакого значения. Один лучше для использования стека / кучи возможно?

0
https://stackoverflow.com/questions/22709371/backticks-vs-braces-in-bash oliv 5 лет назад 1
Спасибо! интересно - ответить на другой вопрос, с другой терминологией, на неправильный форум ... alle_meije 5 лет назад 0
См. [BashFAQ # 82: Почему $ (...) предпочтительнее, чем \ `... \` (обратные метки)?] (Http://mywiki.wooledge.org/BashFAQ/082). Gordon Davisson 5 лет назад 0

1 ответ на вопрос

4
choroba

$() нотация предпочтительна, когда вам нужно ее вложить, т.е. вы можете написать

echo $(echo $(echo 123)) 

но эквивалент в ``будет

echo `echo \`echo 123 \`` 

Открывающие и закрывающие скобки различимы, поэтому нет необходимости использовать обратную косую черту.

Спасибо! да, я думаю, что аргумента о вложенности достаточно, чтобы закрыть сделку. alle_meije 5 лет назад 0
@alle_meije Backticks также имеют некоторые странные эффекты для других экранированных символов внутри команды backticked. По сути, он добавляет еще один этап обработки parse-the-escapes, поэтому экранирование (обратную косую черту) внутри него должно быть удвоено. Внутри вложенных кавычек они должны быть в четыре раза. `$ ()` избегает всей этой чепухи. Gordon Davisson 5 лет назад 0

Похожие вопросы