バックラッシュを逃したか、プログラマークォートループが多すぎるとバックラッシュが機能しないようです。
$ 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\\\`\``"
_
バックスラッシュ、_\\ \\\\ \\\\\\\\
_を2倍にするなど、非常にいので、他の推奨事項として$(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
とパイプで置き換えることができる場合があります
$ 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