ffprobe调用含空格方括号的路径变量时报错是什么原因?
报错原因
该问题是Bash默认的单词拆分和通配符展开机制导致的:
- 你的路径中包含空格,未加引号直接使用
$loc时,Bash会将空格识别为参数分隔符,把完整路径拆分为/e/[Content、Creation]/audio_section_working/1.mp3两个独立参数传给ffprobe,ffprobe会认为你传入了两个输入文件,因此抛出该错误 - 路径中的方括号属于Bash通配符字符,未加引号时还会被Bash尝试匹配当前目录下符合规则的文件名,会进一步干扰路径解析
解决方法
引用路径变量时用双引号包裹,阻止Bash对变量内容做特殊解析即可:
echo $(ffprobe -v error -show_entries format=duration \ -of default=noprint_wrappers=1:nokey=1 "$loc")
补充建议
日常编写Shell脚本时,所有涉及文件路径、文件名,或可能包含特殊字符的变量,引用时都建议默认加双引号包裹,可避免绝大多数类似的参数解析错误。
内容的提问来源于stack exchange,提问作者shank_fab_worker
相关产品推荐
相关产品推荐

