Bash
在腳本末尾刪除所有變數是一種好習慣嗎?
在腳本末尾刪除 shell 腳本中使用的變數是否很好。
rm -rf $abc rm -rf $def
或者
unset $abc unset $def
等等。
這實際上是一個好習慣嗎?
這是一個非常糟糕的做法。
rm
刪除文件。它與變數無關。在任何情況下,當腳本結束並且作業系統回收 shell 的記憶體時,變數本身將被處理掉。在簡單的情況下,與其中一個變數的值同名的文件將被此構造刪除:
abc=filename rm -f $abc # Deletes "filename" in the current directory
它變得更糟。如果
abc
和def
包含文件名作為由空格(或 的任何其他字元)分隔的單個單詞IFS
,您將刪除這些文件,並且*
如果它們出現在任何單詞中,萬用字元 like 也會被擴展。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
Shell參數擴展
$var
受分詞,其中變數的每個字元將IFS
變數劃分為不同的參數。然後每個單詞都受文件名擴展的影響,它使用*
、?
和[abc...]
模式來創建文件名。這可能會變得非常糟糕,具體取決於您的變數中包含的內容。不要這樣做。無需以任何方式在 shell 腳本的末尾留空或取消設置變數。