質問

バックラッシュやバックラッシングを見逃したか、プログラマークオートループがあまりにも多く動作しないようです。

$ 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

他のヒント

バックテックを使用することを主張する場合、フォローを行うことができます

$ 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'sを使用すればずっと簡単です $(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

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

  • すべての引数は、逆の順序で提供する必要があります(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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top