Если я понимаю Вас правильный, здесь пример:
Тишина:
fuser /dev/snd/timer && echo "Something is playing" || echo "There's silence"
There's silence
Я включаю смелый:
fuser /dev/snd/timer && echo "Something is playing" || echo "There's silence"
/dev/snd/timer: 47663
Something is playing
Для OSS chande /dev/snd/timer
кому: /dev/dsp
.
Это - очень зависимый метод.
Я учел бы совет @ChrisDown и не попытался бы сделать что-то умное здесь. Я создал бы для цикла и инвертировал бы ключи со значениями в новом массиве. Это - только несколько строк кода.
Что-либо, что Вы создаете этим способом, будет более трудным для других поддерживать в будущем, и более трудный для Вас помнить/понимать, как он работает, когда Вы пересматриваете код в будущем.
#!/bin/bash
arr=(a b c d)
set -- $(echo ${arr[@]} | tr ' ' '\n' | sed "s/.*/arr['&']=/")
eval echo $(seq 1 ${#arr[@]} | sed 's/\(.*\)/${\1}$(echo \1 -1 | bc)/')
или
#!/bin/bash
declare -A brr
arr=(a b c d)
eval "brr=($(eval echo $(sed 's/\([0-9]\)/[${arr[\1]}]=\1/g' <(echo ${!arr[@]}))))"
echo ${brr[@]}
Вывод:
#arr['a']=0 arr['b']=1 arr['c']=2 arr['d']=3
Как другие сказали, я думаю sed
было бы трудное решение.
Следующий цикл мог выполнить то, что Вы хотите:
arr=(a b c d)
for i in ${!arr[@]}; do
brr+=("[${arr[$i]}]=$i")
done
echo ${brr[@]}
#[a]=0 [b]=1 [c]=2 [d]=3
fork()
новый процесс для sed вдобавок ко всему – dannysauer 06.10.2013, 22:20