如何正确嵌套Bash反引号

要么我错过了一些反弹或反弹似乎并没有太多的程序员引用循环工作。

$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``" hello1-hello2-hello3-echo hello4 

通缉

 hello1-hello2-hello3-hello4-hello5-hello6-... 

使用$(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\\\`\``" 

你必须把反斜杠,2x等等,它只是非常丑陋,使用$(commands)如其他build议。

如果使用bash的$(cmd) 命令replace语法 ,这会更容易,嵌套更友好:

 $ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" hello1-hello2-hello3-hello4 

任何时候你想评估一个命令使用command substitution

 $(command) 

任何时候你想评估一个算术expression式使用expression substitution

 $((expr)) 

你可以像这样嵌套这些:

假设file1.txt是30行,而file2.txt是10行,那么可以像这样计算一个expression式:

 $(( $(wc -l file1.txt) - $(wc -l file2.txt) )) 

这将输出20(两个文件之间的行数的差异)。