Shell变量会在'中被修改。循环,但不在'找到|而'环

时间:2015-08-20 14:41:50

标签: shell loops zsh

我编写了一个zsh脚本来查找一些文件,循环并处理它们。 一旦结束,我需要知道循环内的一个标志设置的状态。 但是标志的修改值不会在while循环之外反映出来。

所以我尝试了没有find的循环。这次,标志的修改值也会在循环外持续存在。

感谢您的解释和解决方法。

'找到|而'环

flag=false
find . -name "*.sh" | while read line
do
    # check conditions, process the file 
    echo "flag = $flag"
    flag=true
    echo "flag = $flag"
done

echo "flag = $flag"

输出

flag = false
flag = true
flag = false

简单循环

i=1
flag=false
while [ $i -le 1 ] 
do
        echo "flag = $flag"
        (( i++ ))
        flag=true
        echo "flag = $flag"
done

echo "flag = $flag"

输出

flag = false
flag = true
flag = true

1 个答案:

答案 0 :(得分:1)

尝试将shebang(#!)添加到脚本的顶部。它将在其自己的shell中运行脚本。

注意:我在其使用的目录中有八个.sh文件。

#! /bin/zsh
flag=0
echo "Before: flag = $flag"
find . -name "*.sh" | while read line
do
  # check conditions, process the file 
  flag=$(($flag+1))
  echo "Inside: flag = $flag"
done
echo "After : flag = $flag"

输出:

Before: flag = 0
Inside: flag = 1
Inside: flag = 2
Inside: flag = 3
Inside: flag = 4
Inside: flag = 5
Inside: flag = 6
Inside: flag = 7
Inside: flag = 8
After : flag = 8

希望这有帮助。