我错过了一些反冲,或者反冲似乎不适用于过多的程序员引用循环。
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
通缉
hello1-hello2-hello3-hello4-hello5-hello6-...
我错过了一些反冲,或者反冲似乎不适用于过多的程序员引用循环。
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
通缉
hello1-hello2-hello3-hello4-hello5-hello6-...
deprecated
因此,使用反引号$(cmd)
。
Answers:
$(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
如果使用bash的$(cmd)
命令替换语法会更容易,它更易于嵌套:
$ 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