我正在尝试做一个简单的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