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
$scacount
initiate ()
bzip ()
initiate ()
bzipint ()
initiate ()
为了测试它是否与内部变量的变化initiate ()
或从中访问的其他函数有关,我使用了 echo $valid
,它是在外部定义的initiate ()
(如$filcount
、$zipcount
等),但不会从内部initiate ()
或内部的另一个函数更改initiate ()
。
有趣的是,$valid
它不会像内部的其他变量一样重置为 0。
谁能告诉我为什么我的变量在读取退出时会神奇地重置?