无法读取,这是一个while循环中存储从变量,出来的时候while循环(Can't read

2019-07-21 05:49发布

我不能为我的生活为什么我不能读while循环外的postPrioity。 我试图“出口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"

OUTPUT:(我只有在files.txt 3文件名)

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

Answer 1:

管道运营商创建一个子shell,看到BashPitfalls和BashFAQ 。 解决办法:不要使用cat ,也没用呢。

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


Answer 2:

作为补充,以菲利普的反应,如果你必须使用一个管道(和他指出,在你的榜样,你不需要猫),你可以把所有的逻辑在管道的同一侧:


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



Answer 3:

可替代地使用进程替换:

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


文章来源: Can't read variable that was stored from within a while loop, when out of the while loop