【发布时间】:2010-11-02 20:50:13
【问题描述】:
大多数解析 /proc/cmdline 的脚本将其分解为单词,然后使用 case 语句过滤掉参数,例如:
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 循环在空格上拆分。
有没有更好的方法从几乎无法评估它的 shell 脚本中解析 /proc/cmdline?
或者有一些引用技巧吗?我在想我也许可以要求用户实体引用空格并像这样解码:/bin/busybox httpd -d "FOO%20BAR"。或者这是一个糟糕的解决方案?
【问题讨论】:
-
您的 shell 已经在解析命令行,拆分参数。为什么要“解析”它,而不仅仅是假设用户会正确引用参数——就像它与任何其他命令有关?如果要删除带有空格的文件,请键入 «rm "file with space"»。如果您的 ESSID 是 «essid wlan=FOO» 怎么办?
-
好吧,我犯了和 JesperE 一样的错误……
标签: parsing shell word argument-passing split