大多数脚本解析的/ 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