当不在while循环中时,无法读取while循环中存储的变量

时间:2009-10-07 05:56:57

标签: linux bash shell while-loop

我不能为我的生活看到为什么我不能在while循环之外阅读postPrioity。 我试过“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"

输出:(我在files.txt中只有3个文件名)

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

3 个答案:

答案 0 :(得分:9)

管道运算符创建子shell,请参阅BashPitfallsBashFAQ。解决方案:不要使用cat,无论如何都没用。

#!/bin/bash
postPriority=0
while read namesInFile
do   
    postPrioity=500
    echo "weeeeeeeeee ---> $postPrioity <--- 1"
done < /files.txt
echo "weeeeeeeeee ---> $postPrioity <--- 2"

答案 1 :(得分:6)

作为Philipp的回应的补充,如果你必须使用管道(正如他所指出的,在你的例子中你不需要cat),你可以将所有逻辑放在管道的同一侧: / p>


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

答案 2 :(得分:1)

或者使用流程替换:

while read line
do    
    variable=value  
done < <(command)