大多數腳本解析的/ proc/CMDLINE它分解成詞,然後篩選出的參數與case語句,例如:分裂的/ proc/CMDLINE參數用空格
CMDLINE="quiet union=aufs wlan=FOO"
for x in $CMDLINE
do
»···case $x in
»···»···wlan=*)
»···»···echo "${x//wlan=}"
»···»···;;
»···esac
done
的問題是WLAN的ESSID時有空間。用戶期望設置wlan='FOO
BAR'(就像一個shell變量),然後用上面的代碼得到意想不到的結果'FOO
,因爲for循環在空間上分裂。
解析/proc/cmdline
的shell腳本有沒有更好的方法來解決這個問題?
還是有一些引用技巧?我想我也許可以讓用戶實體引用空格並解碼,如下所示:/bin/busybox httpd -d "FOO%20BAR"
。或者這是一個不好的解決方案?
你的shell已經在解析命令行,拆分參數。你爲什麼要「解開」它,而不是假設用戶會正確引用這個論點 - 就像它與任何其他命令一樣?如果你想刪除一個帶有空格的文件,你可以用空格「»鍵入«rm»文件。如果你的ESSID是「essid wlan = FOO」呢? – liori 2009-06-14 20:44:56
好吧,我做了與JesperE一樣的錯誤... – liori 2009-06-14 21:33:15