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

如何在Bash脚本中处理通配符参数里含空格的文件名?

解决Bash脚本处理带空格文件名的问题

你的问题根源在于没有给$@添加双引号,导致Shell将带空格的文件名按空白字符拆分成了多个独立参数。

修改后的脚本代码

#!/bin/bash
for file in "$@"
do
    echo "Processing $file" 
done

原理说明

在Bash中:

  • 不带引号的$@会按照IFS(默认是空格、制表符、换行符)拆分所有参数,带空格的文件名会被拆成多个项
  • 加上双引号的"$@"会完整保留每个参数的原始形态,不管参数里包含空格、特殊字符还是换行符

当你执行./myscript.sh *.jpg时,Shell会先将通配符展开为匹配的文件名列表(包括带空格的file two.jpg),每个文件名作为独立参数传递给脚本。"$@"会原样接收这些参数,确保带空格的文件名被当作单个对象处理。

这个写法完全兼容你使用的GNU bash 3.2.57版本,无论通配符是*还是指定扩展名的*.jpg,也不管文件有没有扩展名,都能正确处理带空格的文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:20:28