Shell 变量在 'while' 循环中被修改,但在 'find | while' 循环中没有
Shell variable gets modified in 'while' loop, but not in 'find | while' loop
我写了一个 zsh 脚本来查找一些文件,遍历并处理它们。
一旦结束,我需要知道循环内标志设置的一些状态。
但是标志的修改值不会反映在 while 循环之外。
所以我在没有找到的情况下尝试了循环。这次,修改后的 flag 值也在循环外持续存在。
感谢您对此的解释和解决方法。
'find | while'循环
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
简单的 while 循环
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
尝试将 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
希望对您有所帮助。
我写了一个 zsh 脚本来查找一些文件,遍历并处理它们。 一旦结束,我需要知道循环内标志设置的一些状态。 但是标志的修改值不会反映在 while 循环之外。
所以我在没有找到的情况下尝试了循环。这次,修改后的 flag 值也在循环外持续存在。
感谢您对此的解释和解决方法。
'find | while'循环
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
简单的 while 循环
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
尝试将 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
希望对您有所帮助。