バックラッシュを見逃したか、バックラッシュがプログラマーの引用ループが多すぎると機能しないようです。
$ 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)
他の提案どおりに使用してください。
コマンドを評価したいときはいつでもcommand substitution
:
$(command)
算術式を評価したいときはいつでも次を使用しますexpression substitution
。
$((expr))
これらを次のようにネストできます。
次のような式を評価できるよりも、file1.txt の長さが 30 行で、file2.txt の長さが 10 行であるとしましょう。
$(( $(wc -l file1.txt) - $(wc -l file2.txt) ))
これは 20 を出力します (2 つのファイル間の行数の差)。
ネストしやすい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
増分的に変数をキャプチャして結合できます
__=`printf hello2-`
__=`printf "${__}hello3-"`
__=`printf "${__}hello4-"`
printf "hello1-${__}"