我编写了一个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
答案 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
希望这有帮助。