You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ZSH脚本遍历文件时count计数变量仅递增一次问题排查

问题根因

你遇到的计数异常核心原因是LOOP变量没有被定义为数组类型,只是普通的字符串变量:

  • 你用LOOP=$(ls 2021/*.xlsx)的写法,会把ls输出的所有文件名拼接成一个整字符串赋值给LOOP
  • 后续for FILE in ${LOOP[@]}遍历的时候,整个字符串只会被识别为1个元素,所以循环仅执行1次,count自然只递增1次
  • 你看到的多行文件名输出,是单次循环里echo $FILE打印了包含所有文件名的整字符串,换行是ls输出自带的,不是循环多次执行的结果

修复方案

不要用ls获取文件列表(容易受文件名特殊字符、空格等影响),直接用zsh的glob匹配生成数组即可,修改后的代码如下:

#!/bin/zsh

# 直接用glob匹配生成文件名数组,避免ls的各种问题
LOOP=(2021/*.xlsx)
# 直接取数组长度作为总文件数,不用wc计算更准确
totalFiles=${#LOOP[@]}
directoryCount=0
count=0

for FILE in ${LOOP[@]}; do
    echo "BEFORE: $count"
    count=$((count+1))
    echo "AFTER: $count"
    echo $FILE
done

echo "TOTAL FILE: $totalFiles"
echo $count

修改后循环会按实际文件数执行,count最终会等于totalFiles的数值4,符合你的预期。

内容的提问来源于stack exchange,提问作者Tanner Priest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:27:02