превратить глобальное соответствие из регистра в массив - PullRequest
0 голосов
/ 20 февраля 2009

Я пытаюсь проанализировать / proc / cmdline в моих initramfs с помощью оператора case.

CMDLINE=`cat /proc/cmdline`

for param in $CMDLINE ; do
    case "$param" in
    root=*|init=*)
        eval "$param"
    ;;
    rescue)
        escue="y"
    ;;
    drive*)
        echo -n $param
    ;;
    esac
done

Теперь проблема в том, что у меня есть диск *, я хочу взять несколько экземпляров диска из cmdline и разобрать их все в массив.

Так что / proc / cmdline может выглядеть следующим образом.

/dev/mapper/Betsy-root vga=792 quiet=y opt2=bar opt1=bar op3=bar drive1="abcde:key.gpg" drive2="qrstuv:key2.gpg" drive3="foobar:false"

Проблема связана с оператором case, когда я вожу машину *). $ Param теперь выглядит следующим образом.

drive1="abcde:key.gpg"drive2="qrstuv:key2.gpg"drive3="foobar:false"

Так любопытно, лучший способ выполнить то, что я хочу. Что бы динамически создавать массив дисков. Например

drive[0]
drive[1]
drive[2]

То, что я пытался сделать, это просто искать [a-zA-Z] "и вставлять новую строку. Таким образом, они могли бы быть разделены, и я мог бы бросить их в массив. Хотя мне никогда не удавалось получить это работать, как я надеялся. Так что со всем, что сказал ...

Не зная, сколько экземпляров будет в / proc / cmdline. Как я могу вставить каждый диск [0-9] в массив. Или, может быть, это просто плохое место для заявления случая? Любой совет будет оценен.

1 Ответ

2 голосов
/ 20 февраля 2009
drive*)
    drive_array+=($param)

бац! у тебя есть свой массив Для совместимости со старыми версиями bash:

drive*)
    drive_array=("${drive_array[@]}" $param)

Если в исходной строке был пробел между диском =, значит, ваш штраф. Если есть случаи, когда у них нет пробелов, вам нужно проделать дополнительную работу:

drive*)
    drive_array+=(${param//drive/ drive})

Это делает глобальную замену, чтобы добавить пробел перед каждым диском, таким образом, он разделяется на различные элементы в массиве. Сделайте то же преобразование, чтобы сделать его совместимым со старыми версиями, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...