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

Bash脚本处理含空格文件名失效,如何利用$@正确传参?

解决Bash脚本处理含空格文件名失效的问题

问题根源

你的脚本核心问题是变量引用时没加双引号,导致带空格的文件名被Bash拆分成多个独立参数;另外用cut截取文件名的方式不够健壮,遇到含多个点的文件名会出错。

修改后的脚本

for File in "$@"
do
    # 用Bash内置语法提取不带扩展名的文件名,支持含多个点的情况
    Name="${File%.*}"
    # 所有涉及文件名的变量必须用双引号包裹,保留空格
    ffmpeg -i "$File" -vcodec libx264 -acodec aac -pix_fmt yuv420p "h264_${Name}.mp4"
done

关键修改点

  • 给变量加双引号:"$File"和"h264_${Name}.mp4"确保带空格的文件名被当作一个完整参数传递,不会被Bash拆分。
  • 替换cut为Bash参数扩展:${File%.*}会删除文件名最后一个.及之后的内容,比cut更可靠,比如处理my.video.file.mov时,能正确得到my.video.file而不是my。

传参方式说明

你原来用的ToH264MP4 "My Video Name With Spaces.mov"或ToH264MP4 *都是正确的传参方式,不需要调整,修改脚本即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:46:05