一部のバックラッシュを見逃したか、バックラッシュがプログラマー引用符のループが多すぎても機能しないようです。
$ 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)
。
回答:
$(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
andパイプで置き換えることができます
$ 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