Bash脚本调用含空格路径的mega-ls报错原生执行正常如何解决
根因分析
Bash对不同场景下的转义符、引号处理逻辑存在差异:
- 直接在终端输入
mega-ls ahmedrafat@debugz-it.com:EVE-NG\ Repos时,未被引号包裹的反斜杠\会被Bash直接解析为空格的转义标记,最终传给mega-ls的路径是正确的EVE-NG Repos,所以能正常执行。 - 脚本中你用双引号包裹变量值
mainDir="EVE-NG\ Repos"时,双引号会把反斜杠识别为字面量字符存储,变量实际存储的内容是带反斜杠的EVE-NG\ Repos,展开后传给mega-ls的路径多了额外的反斜杠,自然匹配不到目标路径。
修复方案
最简洁且不易出错的修复方式是:变量赋值时取消多余的转义反斜杠,执行命令时给拼接后的路径整体加双引号避免空格分词:
#!/bin/bash mainDir="EVE-NG Repos" mega-ls "ahmedrafat@debugz-it.com:$mainDir"
双引号会保留路径中的空格为普通字符,不会被Bash拆分为两个独立参数,传入mega-ls的路径和你手动执行时完全一致。
内容的提问来源于stack exchange,提问作者Ahmed Ra'fat
相关产品推荐
相关产品推荐

