Bash脚本访问含空格的外部磁盘路径运行失败该如何解决?
Shell脚本带空格路径访问报错修复方案
错误原因
报错的核心是Shell在解析变量时,默认会把空格、制表符、换行符作为字段分割符,把你完整的磁盘路径/Volumes/G-DRIVE mobile SSD R-Series/拆成了4个独立路径段,导致系统找不到对应目录。你之前的路径定义本身转义是正确的,问题出在变量使用和文件遍历的写法上。
具体修改点
- 废弃
ls遍历文件的写法:ls的输出会被空格自动分割,天生不适合处理带空格/特殊字符的文件名,直接用Shell原生通配符匹配文件即可 - 所有变量作为路径/参数使用时,必须用双引号包裹,禁止变量无引号直接展开,避免空格被识别为分隔符
- 修复原脚本中错误的HTML转义引号
",替换为正常半角双引号 - 修复未定义变量错误:原脚本中
$Path_S1$S1*.zip的$S1没有定义,直接删除即可 - 可选添加
nullglob配置,避免目录下没有zip文件时,通配符被当成普通字符串处理
修改后完整脚本
#!/bin/sh # 路径定义部分原写法的单引号转义是正确的,无需修改 Path_S1=/Volumes/'G-DRIVE mobile SSD R-Series'/Sentinel-1/path_82_frame_648_example/ Path_sub=/Volumes/'G-DRIVE mobile SSD R-Series'/Sentinel-1/path_82_frame_648_sub/ oldEnd=.zip newEnd=subset_Orb # 开启nullglob,无匹配zip时直接跳过循环,纯POSIX环境不支持的话可以删掉这行,在循环开头加[ -e "$i" ] || continue即可 shopt -s nullglob # 直接用通配符匹配文件,变量加双引号包裹 for i in "$Path_S1"*.zip do n=${i%.*} n=${i%T*} n=${n#"${n%_*}_"} date # 所有路径参数都用双引号包裹 /Applications/snap/bin/gpt /Users/brbell01/Documents/SNAP/subset_and_update_orbits_gpt.xml -Pinput1="$i" -Poutput1="$Path_sub$n$newEnd" date done
内容的提问来源于stack exchange,提问作者brbell01
相关产品推荐
相关产品推荐

