files=rm file1.txt
...運行file1.txt
與環境變量files
設置爲值rm
的命令。
這通常是任何簡單命令前面有KEY=VALUE
對這些對被視爲環境變量,僅在該命令的持續時間內設置。
也許你不是想:
files=file1.txt
...或:
files=() # create an empty array, not a scalar (string) variable.
read number
case $number in
1) files+=(file1.txt) ;; # or simply: 1) rm file1.txt ;;
2) files+=(file2.txt) ;; # or simply: 2) rm file2.txt ;;
3) files+=(file3.txt) ;; # or simply: 3) rm file3.txt ;;
*) echo "This file does not exist" >&2 ; exit 1;;
esac
# ...if collecting filenames in an array, then...
echo "Removing files:" >&2
printf ' %q\n' "${files[@]}" >&2 # ...expand that array like so.
rm -f "${files[@]}" # likewise
要理解爲什麼像cmd='rm file1.txt'
將是 - 而正確的語法 - 很不好的做法,並開放自己的錯誤,見BashFAQ #50。
順便說一句,使用名爲'files'的標量變量來存儲(大概)一個*列表*文件是壞的。標量本質上只能存儲一個值;如果您依賴於能夠將空間上的值分割以獲取文件名列表,那麼在嘗試使用名稱中包含空格的文件時會感到非常失望。 –
......作爲讀者,我不清楚爲什麼你的腳本中有一個'files'變量。爲什麼不直接運行刪除? –
我把這個標記爲重複的問題不是*完全* on-point本身,而是接受的答案直接解決了這個問題。 –