98

バックラッシュを見逃したか、バックラッシュがプログラマーの引用ループが多すぎると機能しないようです。

$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"

hello1-hello2-hello3-echo hello4

募集

hello1-hello2-hello3-hello4-hello5-hello6-...
4

6 に答える 6

161

$(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
于 2010-04-17T02:46:54.183 に答える
38

バッククォートを使用することを主張する場合は、次のことができます

$ echo "hello1-`echo hello2-\`echo hello3-\\\`echo hello4\\\`\``"

バックスラッシュ\\ \\\\ \\\\\\\\を2xなどで配置する必要があります。これは非常に醜く、$(commands)他の提案どおりに使用してください。

于 2010-04-17T02:52:49.413 に答える
12

コマンドを評価したいときはいつでもcommand substitution:

$(command)

算術式を評価したいときはいつでも次を使用しますexpression substitution

$((expr))

これらを次のようにネストできます。

次のような式を評価できるよりも、file1.txt の長さが 30 行で、file2.txt の長さが 10 行であるとしましょう。

$(( $(wc -l file1.txt) - $(wc -l file2.txt) ))

これは 20 を出力します (2 つのファイル間の行数の差)。

于 2012-10-12T18:06:56.540 に答える
10

ネストしやすいbash の$(cmd) コマンド置換構文を使用すると、はるかに簡単になります。

$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))"
hello1-hello2-hello3-hello4
于 2010-04-17T02:46:04.823 に答える
2

xargsバッククォートの入れ子をand パイプで置き換えることができる場合があります

$ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1
hello1 hello2 hello3 hello4

このソリューションの欠点は次のとおりです。

  • すべての引数は逆の順序 (4→1) で指定する必要があります。
  • すべての引数はスペースで区切られます ( で解決可能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
于 2019-07-01T08:31:11.883 に答える
0

増分的に変数をキャプチャして結合できます

__=`printf hello2-`
__=`printf "${__}hello3-"`
__=`printf "${__}hello4-"`
printf "hello1-${__}"
于 2021-12-13T17:11:57.713 に答える