Разделение/proc/cmdline споры с пробелами

Почти наверняка нет разницы в производительности. Я предпочитаю неявный стиль второго.

9
задан hendry 14 June 2009 в 18:38
поделиться

2 ответа

В шикарном виде:

$ 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)

1
ответ дан 4 December 2019 в 06:23
поделиться

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
3
ответ дан 4 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: