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
}
bzip2
ディレクトリ内のすべての.bsp
ファイルを圧縮するために使用するbashシェルスクリプトを作成しています。このスクリプトには、合計 (ファイル、成功した zip、成功した整合性スキャン) をカウントするための変数がいくつかありますが、問題が発生したようです。
およびfind $loc -name "*.bsp"
を与えるファイルがなくなると、をゼロに設定し、および(これらはすべて、 内で変更 (増加) されます (中に呼び出されます) または( 内でも呼び出されます)。while read
while read
$filcount
$zipcount
$scacount
initiate ()
bzip ()
initiate ()
bzipint ()
initiate ()
内部で変数が変更されているか、initiate ()
そこからアクセスされる他の関数と関係があるかどうかをテストするために、 echo$valid
を使用しました。initiate ()
$filcount
$zipcount
initiate ()
initiate ()
興味深いことに、$valid
initialize 内の他の変数のように 0 にリセットされません。
読み取りが終了しているときに変数が魔法のようにリセットされる理由を誰か教えてもらえますか?