You need to enable JavaScript to run this app. Bash脚本for循环统计文件目录数量报错且结果错误怎么解决?
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本for循环统计文件目录数量报错且结果错误怎么解决?

代码错误原因与修复方案

1. command not found报错原因

你直接将$((++dirs))、$((++files))作为独立语句执行了。在Bash中$((算术表达式))属于算术扩展,会先计算表达式得到结果,再将结果作为命令尝试执行,等于你每次自增后都在执行1、2这类数字命令,系统找不到对应命令就会抛出报错。

补充:虽然命令执行报错,但算术表达式中的自增操作已经完成,所以变量计数仍然会生效。

2. 统计结果异常原因

两个错误共同导致统计结果错误:

  • 目录判断逻辑写错:你写的[ -d look ]中没有给变量look加$前缀,永远是判断名为look的固定文件是否为目录,99%概率返回假,所以每次循环都只会执行$((++files)),永远统计不到目录
  • 遍历文件的方式存在缺陷:for look in $(ls)会按空格、换行拆分ls的输出,如果你当前目录有带空格/特殊字符的文件名,会被拆成多个循环项,导致循环次数远高于实际文件数,这就是你22个文件统计出48次的核心原因

修正后的代码

#!/bin/bash

# 原始统计逻辑保留,实际更建议用通配符统计避免ls的坑
cfiles=$(ls | wc -l)
echo $cfiles

files=0
dirs=0

# 用*通配符遍历当前目录所有项,天然支持带空格的文件名
for look in *; do
   # 变量加$,用(())做算术运算不需要加$前缀,不会将结果作为命令执行
   [ -d "$look" ] && ((++dirs)) || ((++files))
done

echo "Files: $files"
echo "Directories: $dirs"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 08:57:02