Как правильно вкладывать Баш обратные кавычки
либо я пропустил какой-то люфт, либо люфт, похоже, не работает с слишком большим количеством программистов-цитат.
$ echo "hello1-`echo hello2-`echo hello3-`echo hello4```"
hello1-hello2-hello3-echo hello4
хотел
hello1-hello2-hello3-hello4-hello5-hello6-...
4 ответа:
использовать
$(commands)
вместо:$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" hello1-hello2-hello3-hello4
$(commands)
делает то же самое, что и backticks, но вы можете вложить их.вы также можете быть заинтересованы в расширении диапазона Bash:
echo hello{1..10} hello1 hello2 hello3 hello4 hello5 hello6 hello7 hello8 hello9 hello10
Если вы настаиваете на использовании обратных палочек, можно сделать следующее
$ echo "hello1-`echo hello2-\`echo hello3-\\`echo hello4\\`\``"
вы должны поставить обратную косую черту,
\ \\ \\\\
по 2x и так далее, его просто очень некрасиво, используйте$(commands)
как другие предложили.
каждый раз, когда вы хотите оценить использование команды
command substitution
:$(command)
каждый раз, когда вы хотите оценить арифметическое выражение использовать
expression substitution
:$((expr))
вы можете вложить их вот так:
скажем file1.txt-это 30 строк и file2.txt имеет длину 10 строк, чем вы можете оценить такое выражение:
$(( $(wc -l file1.txt) - $(wc -l file2.txt) ))
который будет выводить 20 (разница в количестве строк между двумя файлами).
Это намного проще, если вы используете Баша
$(cmd)
синтаксис подстановки команд, что гораздо более дружелюбно к вложенности:$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" hello1-hello2-hello3-hello4