これを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"
。何故ですか?
これを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"
。何故ですか?
の出力をコマンド ラインに代入した後$(command)
、実行される唯一の追加の解析は、単語分割とワイルドカード展開です。引用符は処理されないため、コマンドが引用符を出力する場合、引用符はコマンド ラインにリテラル文字として残されます。
これは、 Quote Removalに関する bash マニュアルのセクションで説明されています。
前述の展開の後、引用符で囲まれていない、上記の展開の結果ではない文字「\」、「」、および「"」はすべて削除されます。
引用符はコマンド置換 (この前にリストされた展開の 1 つ) の結果であるため、削除されません。