/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 にスペースが含まれている場合です。for ループがスペースで分割されるため、ユーザーはwlan='FOO
BAR' (シェル変数のように) を設定し、上記のコードで予期しない結果が得られることを期待しています。'FOO
/proc/cmdline
シェルスクリプトから解析して、ほとんど評価するのに足りないより良い方法はありますか?
または、引用のトリックはありますか?私はおそらくユーザーにスペースを引用して次のようにデコードするように頼むことができると考えていました: /bin/busybox httpd -d "FOO%20BAR"
. それともそれは悪い解決策ですか?