スクリプトの最後からすべての変数を削除するのは良い習慣ですか?

スクリプトの最後からすべての変数を削除するのは良い習慣ですか?

シェルスクリプトで使用された変数をスクリプトの最後から削除できますか?

rm -rf $abc
rm -rf $def

または

unset $abc
unset $def

など。

これは本当に良い習慣ですか?

ベストアンサー1

これはとても悪い慣行。

rmファイルの削除。これは変数とは関係ありません。それにもかかわらず、スクリプトが終了し、オペレーティングシステムがシェルのメモリを回復すると、変数自体は解放されます。


単純なケースでは、変数のいずれかの値と同じ名前のファイルが次の構成によって削除されます。

abc=filename
rm -f $abc  # Deletes "filename" in the current directory

状況はさらに悪化します。ファイル名が含まれてabcいる場合defスペースで区切られた個々の単語(または他の文字)、これらのファイルを削除してワイルドカードが単語に表示されると、IFSワイルドカードも拡張されます。*

abc='hello world'
rm -f $abc  # Deletes file "hello" and "world" (leaves "hello world" alone)
abc='5 * 3'
rm -f $abc  # Deletes all files, because * is expanded (!)
def='-r /'
rm -f $def  # Really deletes *all* files this user can access

シェルパラメータは次に拡張されます。$var〜によって噴射ここで、変数の各文字はIFS変数を異なるパラメータに分割します。それからすべての言葉はファイル名拡張子の影響を受ける*?およびパターンを使用して[abc...]ファイル名を作成します。変数の内容によっては、状況が本当に悪くなることがあります。これをしないでください。


空にする必要はありません。未設定何らかの方法でシェルスクリプトの最後に変数を追加します。

おすすめ記事