initiate () {
read -p "Location(s) to look for .bsp files in? " loc
find $loc -name "*.bsp" | while read
do
if [ -f "$loc.bz2" ]
then
continue
else
filcount=$[$filcount+1]
bzip $loc
fi
if [ "$scan" == "1" ]; then bzipint $loc
fi
echo $filcount #Correct counting
echo $zipcount #Correct counting
echo $scacount #Correct counting
echo $valid #Equal to 1
done
echo $filcount #Reset to 0
echo $zipcount #Reset to 0
echo $scacount #Reset to 0
echo $valid #Still equal to 1
}
我正在编写一个 bash shell 脚本,用于bzip2压缩.bsp目录中的所有文件。在这个脚本中,我有几个用于计算总数的变量(文件、成功的 zip、成功的完整性扫描),但是我似乎遇到了问题。
当find $loc -name "*.bsp"文件用完while read并while read退出时,它会将 out和$filcount(所有这些都在内部更改(增加),(在 期间调用)或(也称为 in )归零。$zipcount$scacountinitiate ()bzip ()initiate ()bzipint ()initiate ()
为了测试它是否与内部变量的变化initiate ()或从中访问的其他函数有关,我使用了 echo $valid,它是在外部定义的initiate ()(如$filcount、$zipcount等),但不会从内部initiate ()或内部的另一个函数更改initiate ()。
有趣的是,$valid它不会像内部的其他变量一样重置为 0。
谁能告诉我为什么我的变量在读取退出时会神奇地重置?