2015-05-23 5 views
-1

Я новичок в скрипте bash, и я хотел бы присвоить массиву вывод переменной с помощью grep "abcd" -c.Bash - назначить массиву out put переменной | grep "abcd" -c

Вот мой код:

for .... 
do 
disUser[$i]= "$VAR" | grep "abcd" -c 
echo "disuser $i" $'\t' "${disUser[$i]}" 
done 

но выход ... к disuser 0
в disuser 1
к disuser 2

Я понимаю, что задание не работает , Может кто-нибудь мне помочь??

Спасибо заранее

+0

Для замены, вам нужно использовать ' '' вместо '" ', как я помню, поэтому он должен быть:' эхо «disuser $ i '$' \ t '' $ {disUser [$ i]} ''. –

+0

Я не думаю, что проблема в команде вывода. Я думаю, что назначение ошибочно. – dside

+0

Если« i »не является числовым , тогда массив должен быть объявлен ассоциативным с выражением «declare». – RTLinuxSW

ответ

0

Вы, вероятно, нужно изменить свое назначение, чтобы быть более корректной команды, как

disUser[$i]=$(grep -c "abcd" <<<"$VAR") 

так что вы используете $(...) для выполнения команды, и мы экономим, что в переменную, а именно disUser[$i] в этом случае. Внутри команды может быть что угодно, в этом случае мы повторяем переменную и трубопровод, которая равна grep -c.

Edit: изменил команду, чтобы соответствовать отличные советы Чарльза Даффи, чтобы избежать подоболочку

+2

'echo '$ VAR" ', а не' echo $ VAR', если вы не хотите, чтобы все пробелы были изменены на пробелы, расширяемые глобусы и т. Д. Еще лучше было бы сделать это 'grep -c" abcd "<< <"$ VAR", получив эхо-изображение полностью. –

+0

Вы правы. с «$ VAR» у меня есть результат, который я хочу. Спасибо вам всем!!! – dside

+0

@CharlesDuffy благодарит за отличные советы. Я думаю, что в этом случае, так как это «grep -c», изменение пробела не имело бы значения (если только его шаблон не подсчитан на нем), но '<<<', безусловно, лучший способ пойти независимо от –

Смежные вопросы