バックティック内のネストエコーコマンド

バックティック内のネストエコーコマンド

私のシェルに追加のエコーが印刷される理由を知りたいです。bashバージョン4.2.46(1)を使用しています。

echo `echo `echo $SHELL``

興味深い問題は、交換すると追加のエコーが印刷されない'``'ことです。$()

echo $(echo `echo $SHELL`)

echo奇数命令番号に追加のエコーが印刷されることがわかりました。

echo `echo `echo `echo `echo $SHELL````

ベストアンサー1

2つのバージョン:

echo `echo `echo $SHELL``

そして

echo $(echo `echo $SHELL`)

同等ではありません。最初バックティックコマンドの置き換え別のバックティックが表示されたらすぐに終了してください。

以前のバックティック置換形式を使用している場合、[...]先行バックスラッシュのない最初のバックティックはコマンド置換を終了します。

最初のバージョンは実際には次のとおりです。

echo $(echo )echo $SHELL$()

そのため、出力に「echo」と表示されます。 (交換後に余分なスペースを削除した後)実行するコマンドは次のとおりです。

echo echo /bin/bash

したがって、コマンドを直接書いたように、出力は "echo /bin/bash"です。


バックティックを入れ子にする必要がある場合は、内部ペアをバックスラッシュしてエスケープできます。最初のコマンドは、次のように正しく作成できます。

echo `echo \`echo $SHELL\``

しかし、お勧めしません。$( ... )ネスト用に設計されています。

おすすめ記事