要麼我錯過了一些反彈或反彈似乎不適用於太多的程序員引用循環。如何正確嵌套Bash反引號
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
通緝
hello1-hello2-hello3-hello4-hello5-hello6-...
要麼我錯過了一些反彈或反彈似乎不適用於太多的程序員引用循環。如何正確嵌套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)
與反引號的作用相同,但可以將它們嵌套。
您還可能有興趣在擊範圍擴展:
echo hello{1..10}
hello1 hello2 hello3 hello4 hello5 hello6 hello7 hello8 hello9 hello10
+1就像{1..10}。限制它與數組? ZSH可以「$ {$(date)[2,4]}」。爲什麼不:「echo $ {echo hello1 - $(echo hello2)[1]}」? – hhh 2010-04-17 11:03:49
如果你使用bash的$(cmd)
command substitution syntax,這是更爲友好的嵌套這是一個容易得多:
$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))"
hello1-hello2-hello3-hello4
這不限於* bash *。它在所有符合POSIX 1003.1(「POSIX shells」)和大多數Bourne派生shell(* ksh *,* ash *,* dash *,* bash *,* zsh *等)的shell中都可用。實際的Bourne shell(即http://heirloom.sourceforge.net/sh.html)。 – 2010-04-17 03:02:56
,如果你堅持使用反引號,下面可以做
$ echo "hello1-`echo hello2-\`echo hello3-\\\`echo hello4\\\`\``"
你必須把反斜線,\\ \\\\ \\\\\\\\
由2等它只是非常醜陋,使用其他建議使用$(commands)
。
這實際上回答了這個問題 – Justas 2017-12-23 20:06:33
要評估一個命令使用command substitution
任何時間:
$(command)
要計算算術表達式中使用expression substitution
任何時間:
$((expr))
您可以嵌套這些是這樣的:
讓我們假設file1.txt是30行長,file2.txt是10行長,比你可以這樣評估一個表達式:
$(($(wc -l file1.txt) - $(wc -l file2.txt)))
這將輸出20(兩個文件之間的行數差異)。
這個問題可能應該是「如何遞歸地使用Bash反引號」。這應該有助於Google員工在那裏。 – 2010-04-17 02:46:08
你想要做什麼?這根本沒有意義。 – ghostdog74 2010-04-17 02:46:53
@joey,標題改變了,歡迎光臨:D – Stormenet 2010-04-17 02:49:37