Невозможно прочитать переменную, которая была сохранена в цикле while, когда вне цикла while - PullRequest
1 голос
/ 07 октября 2009

Не могу понять, почему не могу прочитать postPrioity вне цикла while. Я пытался "export postPrioity =" 500 "" все еще не работает.

Есть идеи?

- или в тексте плана -

#!/bin/bash
cat "/files.txt" | while read namesInFile; do   
            postPrioity="500"
            #This one shows the "$postPrioity" varible, as '500'
            echo "weeeeeeeeee ---> $postPrioity <--- 1"
done
            #This one comes up with "" as the $postPrioity varible. GRRR
            echo "weeeeeeeeee ---> $postPrioity <--- 2"

ВЫХОД: (У меня есть только 3 имени файла в файле files.txt)

weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee --->  <--- 2

Ответы [ 3 ]

9 голосов
/ 07 октября 2009

Оператор канала создает подоболочку, см. BashPitfalls и BashFAQ . Решение: не используйте cat, это все равно бесполезно.

#!/bin/bash
postPriority=0
while read namesInFile
do   
    postPrioity=500
    echo "weeeeeeeeee ---> $postPrioity <--- 1"
done < /files.txt
echo "weeeeeeeeee ---> $postPrioity <--- 2"
6 голосов
/ 07 октября 2009

В качестве дополнения к ответу Филиппа, если вы ДОЛЖНЫ использовать трубу (и, как он указал, в вашем примере вам не нужен cat), вы можете поместить всю логику на одну и ту же сторону трубы:


command | {
  while read line; do
    variable=value
  done
  # Here $variable exists
  echo $variable
}
# Here it doesn't

1 голос
/ 07 октября 2009

Альтернативно используйте замену процесса:

while read line
do    
    variable=value  
done < <(command)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...