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

使用变量存储通配符执行ls命令失效的原因咨询

问题原因解释

这是Shell的通配符扩展时机导致的差异:

  1. 直接执行ls -dq *.sb | wc -l时,Shell会先对*.sb做路径扩展(通配符匹配)——它会遍历当前目录,把*.sb替换成所有后缀为.sb的实际文件名,再把这些文件名作为参数传给ls。此时ls处理的是真实存在的文件,自然能正确统计数量。

  2. 当你把*.sb存入变量search,再用"$search"调用时,双引号会阻止Shell的通配符扩展。这时候ls收到的参数就是字面意义的字符串*.sb,而你的目录里根本没有名为*.sb的文件,所以ls报错找不到,wc -l统计的是ls的输出行数(此时没有正常输出,结果就是0)。

如果想让变量中的通配符生效,可以去掉双引号直接写ls -dq $search | wc -l,但要注意如果文件名包含空格、特殊字符时,这种写法可能会出问题——更稳妥的方式是用数组存储匹配结果,比如:

search=(*.sb)
echo "${#search[@]}"

这样直接统计数组长度,不用调用ls和wc,更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:10:34