2015-05-21 1 views
-1

У меня есть этот код в Elastix2.5 (CentOS):Как установить переменную = null в цикл for?

for variable in $(while read line; do myarray[ $index]="$line"; index=$(($index+1)); echo "$line"; done < prueba); 

Этот экстракт значения для каждой строки из файла "Prueba".

Prueba содержимое файла паролей, как это:

Admin1234 
Hello543 
Chicken5444 

Dino6759 
3434Cars4 

Adminis5555 

Но, $variable только получить значения из строк, где есть буквы, мне нужно, что получить NULL значения из пустых строк. Как мне это сделать?

ответ

0

Ваша проблема использование for петли с command substitution ($(...)); давайте посмотрим на этот простой пример:

$ for v in $(echo 'line_1'; echo ''; echo 'line_3'); do echo "$v"; done 
line_1 
line_3 

Обратите внимание, как пустая строка производится 2 echo команды эффективно отбрасываются. Аналогично, любые пустые строки, созданные вашей петлей while, отбрасываются.

Раствор для avoid for loops altogether for parsing command output:

В вашем случае, просто используйте толькоwhile петля для итерация входного файла:

while read -r line; do 
    myarray[index++]="$line" 
done < prueba 
printf '%s\n' "${myarray[@]}" 
  • -r был добавлен, чтобы обеспечить что read не изменяет вход (не пытается интерпретировать \ -pref смешанные последовательности) - это хорошая практика в целом.

  • Обратите внимание, что приращение индекса было перенесено непосредственно в индекс массива (index++).

  • printf '%s\n' "${myarray[@]}" печатает все элементы массива после того, как файл был прочитан, показывая, что пустые строки также были прочитаны.

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

  • Нет связанных вопросов^_^