while 循环重置 Bash 脚本中的数字变量



我正在尝试做一个简单的bash脚本,在一组文件夹中的每个文件中的一个中做一些事情。我也喜欢计算脚本读取了多少文件,但是当脚本通过循环时,数字变量被重置。

我使用的代码是这样的

#!/bin/bash
let AUX=0
find . -type "f" -name "*.mp3" | while read FILE; do
    ### DO SOMETHING with $FILE###
    let AUX=AUX+1
    echo $AUX
done
echo $AUX

我可以看到 AUX 在循环内计数,但最后一个"echo"打印了一个 0,并且变量似乎真的被重置了。我的控制台输出是这样的

...
$ 865
$ 866
$ 867
$ 868
$ 0

我想在 AUX 中保留处理的文件数量。知道吗?

不要使用管道,它会创建一个子外壳。下面是示例。

#!/bin/bash
declare -i AUX=0
while IFS='' read -r -d '' file; do
    ### DO SOMETHING with $file###
    (( ++AUX ))
    echo $AUX
done < <(find . -type "f" -name "*.mp3")
echo $AUX

如果您使用的是 4.0 或更高版本bash请使用 globstar 选项而不是 find

shopt -s globstar
aux=0
for f in **/*.mp3; do
    # Just in case there is a directory name ending in '.mp3'
    [[ -f $f ]] || continue
    # Do something with $f
    echo "$(( ++aux ))"
done

相关内容

  • 没有找到相关文章

最新更新