Stack Exchangeで見つけた答えは正しく、このチュートリアルは間違っています。自分で実験したり、標準で調べたりすることができます。unset IFS
は、デフォルト値のspace-tab-newlineに設定することと同じですが、空の場合、IFS
フィールド分割は事実上オフになります。
あなたは相談することができIFS上スヴェンMascheckのページを歴史的な実装について。いくつかの歴史的なシェルはを好まなかったunset IFS
、そして非常に古いバージョンのkshはそれを空のように扱ったIFS
が、すべての最近のシェルとほとんどの古いシェルはunsetをIFS
デフォルト値のように扱った。
IFS=
フィールド分割をオフにしたくない場合を除いて、スクリプトを開始しないでください(これは合理的な決定です。ただし、グロブを回避するために、二重引用符を配置する必要があることに注意してくださいset -f
)。デフォルト値をリセットするには、を使用しますunset IFS
。これがスクリプトの最初に役立つかどうかは議論の余地があります。PATH
スクリプトを誤らせるために呼び出し元が実行できる危険なことなど、他にも多くの悪い点があります。
このチュートリアルでは、リセットすることもお勧めしPATH
ます。これは通常悪いアドバイスです。ほとんどの場合、正しい検索パスを予測することはできませんが、ユーザーは知っています。どのようにするかどうかを知っています/usr/local/bin
か/home/bob/bin
内のものはどこ古代のUNIX上でのユーティリティのバグ固定のバージョンが含まれている/usr/bin
バグがありますか?本当に/usr/xpg6/bin
先に行くかどうかを判断するためのすべてのロジックを埋め込んで/bin
よろしいですか?あなたはどの位置にいます/usr/gnu/bin
か?スクリプトが特定のシステムを対象としない限り、PATHをリセットしないでください。
私はこのチュートリアルを読んだことはありませんが、1つのことを確認しました。最初から常に、変数置換とコマンド置換を二重引用符で囲むことはわかりません。ですから、このチュートリアルは良いものではないと思います。
unset IFS
フィールド分割はリセットされますが、IFSはbashのデフォルト値にリセットされません。