Индекс массива в виде алфавита / слова - PullRequest
0 голосов
/ 08 февраля 2011

В сценариях оболочки ksh есть ли способ сделать так:

a[daemon1]=1
a[daemon2]=1
a[daemon3]=1

Я хочу установить флаги для имени демона, проверить, является ли флаг высоким, затем выполнить некоторые действия.
Аналогично awk / perl.

Спасибо

Ответы [ 3 ]

1 голос
/ 08 февраля 2011

Оболочка Korn поддерживает ассоциативные массивы:

typeset -A foo    # create an associative array
bar=abc
baz=qux
foo[$bar]=def
foo[$baz]=ghi
for index in ${!foo[@]}
do
    echo "Index: $index, Value: ${foo[$index]}"
done

Результат:

Index: abc, Value: def
Index: qux, Value: ghi
1 голос
/ 08 февраля 2011

Почему бы не использовать массив ksh?

$ x[a]=1
$ x[b]=ddd
$ echo ${x[*]}
1 ddd
$ echo ${x[a]}
1

http://docstore.mik.ua/orelly/unix/ksh/ch06_03.htm

0 голосов
/ 08 февраля 2011

Почему бы не использовать такие имена, как a_daemon1 ?

Стандартно-совместимый код для ассоциативных массивов, на которые вы можете посмотреть:

varcmd()
{
    eval $(echo $*|tr -d "./;")
}

varcmd test '$'$fn$oldrev
if [ $? -eq 0 ]; then
    varcmd $fn$rev='$'$fn$oldrev
    varcmd unset $fn$oldrev
else
    varcmd $fn$rev=$oldrev
fi
...