Либо я пропустил некоторую обратную реакцию, либо обратная реакция, похоже, не работает со слишком большим циклом программиста-цитаты.
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
Хотел
hello1-hello2-hello3-hello4-hello5-hello6-...
deprecated
, поэтому используйте$(cmd)
.Ответы:
$(commands)
Вместо этого используйте :$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" hello1-hello2-hello3-hello4
$(commands)
делает то же самое, что и обратные кавычки, но их можно вкладывать.Вас также могут заинтересовать расширения диапазона Bash:
echo hello{1..10} hello1 hello2 hello3 hello4 hello5 hello6 hello7 hello8 hello9 hello10
источник
если вы настаиваете на использовании обратных кавычек, можно сделать следующее
$ echo "hello1-`echo hello2-\`echo hello3-\\\`echo hello4\\\`\``"
вам нужно поставить обратную косую черту
\\ \\\\ \\\\\\\\
в 2 раза и так далее, это просто очень уродливо, используйте$(commands)
как другие предложенные.источник
Каждый раз, когда вы хотите оценить команду, используйте
command substitution
:$(command)
Каждый раз, когда вы хотите оценить арифметическое выражение, используйте
expression substitution
:Вы можете вложить их так:
Скажем, file1.txt имеет длину 30 строк, а file2.txt - 10 строк, тогда вы можете вычислить такое выражение:
что выведет 20 (разница в количестве строк между двумя файлами).
источник
Это будет намного проще, если вы используете
$(cmd)
синтаксис подстановки команд bash , который гораздо удобнее вложить:$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" hello1-hello2-hello3-hello4
источник
Иногда вложение обратных кавычек можно заменить на
xargs
и трубы$ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1 hello1 hello2 hello3 hello4
Недостатками этого решения являются:
Все аргументы разделяются пробелами (разрешается с помощью
tr
):$ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1 | tr ' ' '-' hello1-hello2-hello3-hello4
Покажем реальный вариант использования.
Следующие команды работают в bash, но не в tcsh (вложение обратных кавычек не очень хорошо обрабатывается в tcsh)
$ ls $(dirname $(which bash)) $ ls `dirname \`which bash\``
Их можно заменить на
$ which bash | xargs dirname | xargs ls
источник