1

これをBashで実行すると

echo "1 2"

私は得る1 2。しかし、私が実行すると

echo \"1 2\"

私は得る"1 2"

今、私が実行するかどうかを理解します

echo $(echo \"1 2\")

私は得るでしょう1 2。しかし、再び、私は得る"1 2"。実際、チェーン内のコマンド置換の数に関係なく

echo $(echo $( ... echo \"1 2\") ... )

私はいつも得る"1 2"。何故ですか?

4

1 に答える 1

1

の出力をコマンド ラインに代入した後$(command)、実行される唯一の追加の解析は、単語分割とワイルドカード展開です。引用符は処理されないため、コマンドが引用符を出力する場合、引用符はコマンド ラインにリテラル文字として残されます。

これは、 Quote Removalに関する bash マニュアルのセクションで説明されています。

前述の展開の後、引用符で囲まれていない、上記の展開の結果ではない文字「\」、「」、および「"」はすべて削除されます。

引用符はコマンド置換 (この前にリストされた展開の 1 つ) の結果であるため、削除されません。

于 2015-02-05T06:19:59.153 に答える