シェルスクリプトで使用された変数をスクリプトの最後から削除できますか?
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...]
ファイル名を作成します。変数の内容によっては、状況が本当に悪くなることがあります。これをしないでください。
空にする必要はありません。未設定何らかの方法でシェルスクリプトの最後に変数を追加します。