Bash如何解析表达式中的嵌套引号?规范写法问询
解析结果
你给出的表达式会被解析为第一种逻辑(Bash中无+拼接符,相邻字符串自动拼接):""(空字符串) + 未被引号包裹的$(dirname "$0")执行结果 + "/config.sh"(被双引号包裹的固定字符串)
Bash的引号是成对匹配生效的:开头的两个"直接组成了一个闭合的空引用段,后续的$(dirname "$0")不在任何引号范围内,直到遇到下一个"才开启新的引用段包裹/config.sh,所以不是第二种解析逻辑。
这种写法存在安全隐患:如果dirname "$0"返回的路径包含空格、通配符等特殊字符,未被引号包裹的命令替换结果会触发分词和通配符展开,导致config_file赋值错误,甚至引发非预期执行问题。
正确规范写法
应该把整个路径拼接逻辑都包裹在同一组双引号内,既保证命令替换正常执行,也避免特殊字符引发的问题:
config_file="$(dirname "$0")/config.sh"
该写法的实际效果和你提到的第二种逻辑一致,且写法更统一易读,符合Bash变量赋值的最佳实践。
内容的提问来源于stack exchange,提问作者hermit.crab
相关产品推荐
相关产品推荐

