Есть два синтаксиса для подстановки команд: с долларовыми скобками и с обратными галочками. Работает top -p $(pidof init)
и top -p `pidof init`
выдает тот же вывод. Это два способа сделать одно и то же или есть различия?
shell
command-line
command-substitution
tshepang
источник
источник
Ответы:
Обратные кавычки старого стиля
` `
обрабатывают обратную косую черту и вложенность немного по-другому. Новый стиль$()
интерпретирует все промежуточное( )
как команду.работает, если вложенные обратные кавычки экранированы:
удовольствие от обратной косой черты:
Новый стиль
$()
применяется ко всем POSIX-совместимым оболочкам.Как указывал Мувичиэль , старый стиль
` `
может быть необходим для более старых оболочек.Помимо технической точки зрения, старый стиль
` `
имеет и визуальный недостаток:I like $(program) better than `program`
'`'`''`''`'`''`'
(и SE использует
` `
в своих целях, было очень тяжело писать этот ответ :)источник
{ }
обычно называют «фигурными скобками» или «фигурными скобками» en.wikipedia.org/wiki/Braces_(punctuation)#Braces`
это мертвая клавиша, поэтому я должен набрать либо двойной обратный удар (что я обычно забываю, я даже могу сделать), либо обратный удар после пробела, который является боль.Очевидное различие, которое я наблюдаю, состоит в том, что вы не можете вкладывать обратные метки, в то время как можете вкладывать
$()
. Возможно, оба существуют по наследственным причинам. Точно так же.
иsource
команды являются синонимами.источник
source
. Тире является одним из примеров.$(...)
и`...`
являются стандартными (последний является устаревшим), в то время как.
является стандартным, но нетsource
(t)csh
они не могут быть вложенными.(t)csh
не поддерживаю$(...)
все же Они поддерживаютsource
(и не.
), хотя.$()
не работает со старой оболочкой Bourne. Но прошло многолет,как я работал со старой оболочкой Bourne.источник
Еще одно примечание,
$()
будет использовать больше системных ресурсов, чем использование обратных галочек, но немного быстрее.В разделе « Освоение сценариев оболочки Unix» Рэндал К. Майкл провел тест в главе под названием «24 способа обработки файла построчно».
источник
$()
делает ваш скрипт на один байт больше, чем если бы он использовал`
(при условии, что вы их не вкладываете и не используете обратную косую черту внутри). Что из того, что будет быстрее анализировать, будет варьироваться между оболочками и не будет иметь значения, так как незначительно по сравнению со стоимостью создания канала и разветвления процесса, что влечет за собой замену команды.Чтобы добавить к тому, что здесь говорят другие, вы можете использовать обратные галочки для имитации встроенных комментариев:
Выход:
foo bar
.Для получения дополнительной информации см. Следующее: https://stackoverflow.com/a/12797512 (обратите внимание также на комментарии под этим сообщением.)
источник
$()
Синтаксис не будет работать со старой оболочкой Борна.С новыми оболочками
` `
и$()
эквивалентны, но$()
гораздо удобнее использовать, когда вам нужно вложить несколько команд.Например :
легче набрать и отладить, чем:
источник