Использование обратных символов или доллара в сценариях оболочки

9

Я занят написанием сценария оболочки (используя Bash), где мне нужно заполнить некоторую переменную из возвращенного результата другой команды.

Поэтому я использую такой синтаксис, как этот:

VAR=`command 2>/dev/null`

Но когда я искал информацию о оболочках скриптов, я часто обнаруживал, что вышеприведенного можно достичь, используя также следующий синтаксис:

VAR=$(command 2>/dev/null)

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

Джастин
источник
Ссылки от belacqua предлагают много информации о различиях и использовании. Закрытие, поскольку оно не связано с проблемой Ubuntu, а скорее с программированием. Я настоятельно рекомендую перейти по ссылкам, указанным выше.
Луис Альварадо

Ответы:

13

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

l0b0
источник
3

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

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Замена обратных галочек $()дает тот же результат, и его легче читать (меньше различий в кавычках различаемых углов):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

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

Аарон
источник
Backticks не может быть даже вложенным функционально.
Бернхард
@Bernhard Мой пример показывает, что я имел в виду с этим утверждением.
Аарон