Почти наверняка нет разницы в производительности. Я предпочитаю неявный стиль второго.
В шикарном виде:
$ f() { echo $1 - $3 - $2 - $4
> }
$ a="quiet union=aufs wlan=FOO"
$ f $a
quiet - wlan=FOO - union=aufs -
Вы можете определить функцию и указать свой $ CMDLINE без кавычек в качестве аргумента функции. Затем вы вызовете механизмы синтаксического анализа оболочки. Обратите внимание, что вы должны протестировать это на оболочке, в которой он будет работать - zsh делает некоторые забавные вещи с цитированием; -).
Затем вы можете просто сказать пользователю использовать цитирование, как в оболочке:
#!/bin/posh
CMDLINE="quiet union=aufs wlan=FOO"
f() {
while test x"$1" != x
do
case $1 in
union=*) echo ${1##union=}; shift;;
*) shift;;
esac
done
}
f $CMDLINE
(posh - Соответствующая политике обычная оболочка, оболочка, лишенная каких-либо функций, помимо стандартного POSIX)
Most commonly, \0ctal
escape sequences are used when spaces are unacceptable.
In Bash, printf
can be used to unescape them, e.g.
CMDLINE='quiet union=aufs wlan=FOO\040BAR'
for x in $CMDLINE; do
[[ $x = wlan=* ]] || continue
printf '%b\n' "${x#wlan=}"
done