Bash

在腳本末尾刪除所有變數是一種好習慣嗎?

  • October 21, 2018

在腳本末尾刪除 shell 腳本中使用的變數是否很好。

rm -rf $abc
rm -rf $def

或者

unset $abc
unset $def

等等。

這實際上是一個好習慣嗎?

這是一個非常糟糕的做法。

rm刪除文件。它與變數無關。在任何情況下,當腳本結束並且作業系統回收 shell 的記憶體時,變數本身將被處理掉。


在簡單的情況下,與其中一個變數的值同名的文件將被此構造刪除:

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

它變得更糟。如果abcdef包含文件名作為由空格(或 的任何其他字元)分隔的單個單詞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 腳本的末尾留空或取消設置變數。

引用自:https://unix.stackexchange.com/questions/360375