Bashは一重引用符内の特殊文字を解釈します。

Bashは一重引用符内の特殊文字を解釈します。

予期せず、興味深い動作が発生しました。やや複雑な実行中に、Bashが文字を処理する方法の理解に基づいてはいけない状況に直面しました。

問題の小さな例:

$ arr=( "$(echo '1 && !/==/')" )
-bash: !/=: event not found

ここで何が起こっているのでしょうか?私が理解しているように、一重引用符は、Bashが何らかの拡張なしですべての文字を文字通り解釈するように強制すると見なされます。

バッシュを使う4.1.2。

編集:単純化されたコピーの問題。

ベストアンサー1

bash は無効なイベントのエラーで終了します。

!あなたは恐ろしい記録の置き換え(二重引用符内の文字)のために詰まっています。を使用して無効にできますset +H。ところで、これはスクリプトでは発生しません。

readarray単語分割に関して(またはエイリアスmapfile)を使用できます。

readarray -t array < <(df -Ph ...)

おすすめ記事