Поскольку вы хотите, чтобы оболочка анализировала содержимое / proc / cmdline, трудно избежать ее оценки.
#!/bin/bash
eval "kernel_args=( $(cat /proc/cmdline) )"
for arg in "${kernel_args[@]}" ; do
case "${arg}" in
wlan=*)
echo "${arg#wlan=}"
;;
esac
done
Это, очевидно, опасно, так как он слепо запускает все, что было указано в командной строке ядра, например quiet union=aufs wlan=FOO ) ; touch EVIL ; q=( q
.
Выход из пробелов (\ x20) звучит как самый простой и безопасный способ.
Тяжелой альтернативой является использование некоторого парсера, который понимает синтаксис, похожий на оболочку.
В этом случае вам может даже не понадобиться оболочка.
Например, с питоном:
$ cat /proc/cmdline
quiet union=aufs wlan='FOO BAR' key="val with space" ) ; touch EVIL ; q=( q
$ python -c 'import shlex; print shlex.split(None)' < /proc/cmdline
['quiet', 'union=aufs', 'wlan=FOO BAR', 'key=val with space', ')', ';', 'touch', 'EVIL', ';', 'q=(', 'q']