![割り当てに空白があっても引用されていない$PATHが安全なのはなぜですか? [コピー]](https://linux33.com/image/134869/%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%AB%E7%A9%BA%E7%99%BD%E3%81%8C%E3%81%82%E3%81%A3%E3%81%A6%E3%82%82%E5%BC%95%E7%94%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%24PATH%E3%81%8C%E5%AE%89%E5%85%A8%E3%81%AA%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
次はどこから来たのですかhttps://unix.stackexchange.com/a/154290/674意味は?
通常、zsh以外のシェルでは、値にスペースやその他の特殊文字が含まれていると、二重引用符の外側の$ PATHが壊れます。ミッションの実行中は安全です。
いくつかの例を挙げることができますか?ありがとうございます。
答え1
単純割り当ての変数(例a=$b
:)は定義(例:POSIX仕様)によって定義され、通常引用する必要はありません。とにかくほとんどの場合です。これは、「文字列分割」や「ワイルドカード」(スペースやワイルドカードなど)がこれらの割り当てでは拡張されないためです*
。
それ以外の場合は、代入を除く変数( echo $b
)はいecho "$b"
したがって、拡張(スペースを含む(文字列分割))は、スペースが含まれている場合に問題を回避するために引用符()で囲む必要があります。たとえば、例として使用せずに別のecho
コマンドを使用する場合を考えてみましょう。cmd $b
空白があれば複数の引数を受け取りますが、$b
空白cmd "$b"
があっても 1 つの引数を受け取ります。