Я занят написанием сценария оболочки (используя Bash), где мне нужно заполнить некоторую переменную из возвращенного результата другой команды.
Поэтому я использую синтаксис, подобный следующему:
VAR=`command 2>/dev/null`
Но когда я искал информацию о оболочках сценариев, я часто обнаруживал, что вышеприведенного можно достичь, используя также следующий синтаксис:
VAR=$(command 2>/dev/null)
Оба работают на меня (я получил ожидаемый результат в обоих случаях), и поэтому мне интересно, могу ли я использовать обе формы взаимозаменяемо или мне нужно придерживаться одной формы, чтобы быть уверенным, что оставаться совместимым с будущей эволюцией оболочки?
Используйте доллар. Обратные галочки полуудерживаются от использования , потому что они более сложны для использования (см. ссылку), и нет никаких преимуществ для них, если Вы не делаете гольф кода и абсолютно должны сохранить отдельный символ. Они, вероятно, не будут удалены из популярных оболочек в ближайшее время, хотя, таким образом, Вы - безопасное использование любого на данный момент.
Палка с нотацией $()
знака доллара каждый раз, когда Вы можете. Обратные галочки становятся громоздкими/сбивающими с толку, когда Вы начинаете должными быть сделать вложенное заключение в кавычки. Исключая:
$ FOO=`echo "foo's"`
$ echo $FOO
foo's
Замена обратных галочек с $()
урожаи тот же вывод, и легче читать (меньше кавычек переменных углов для различения):
$ FOO=$(echo "foo's")
$ echo $FOO
foo's
, Что, и каждая кавычка (одинарная кавычка, двойная кавычка, обратная галочка) означает что-то другое в оболочке, так использование $ может помочь удалить уровень сложности. И разработчик, который следует за Вами, поблагодарит Вас, поскольку у него будет более легкое время, выясняя то, что Вы сделали.