如何正确引用含引号的Shell命令并修复SC2046警告?
修复ShellCheck SC2046警告:正确处理嵌套命令的引用
原代码触发ShellCheck警告:
here=$(dirname $(realpath "$0" 2> /dev/null || grealpath "$0")) ^-- SC2046 (warning): Quote this to prevent word splitting.
安全写法
将内层命令替换的结果用双引号包裹,避免路径中的空格或特殊字符引发单词拆分:
here=$(dirname "$(realpath "$0" 2> /dev/null || grealpath "$0")")
原因说明
SC2046警告的核心问题是:当realpath或grealpath返回包含空格、制表符或通配符的路径时,未加引号的命令替换会触发单词拆分,导致dirname接收到多个不完整的路径片段,进而输出错误结果。
给内层$(...)添加双引号后,Shell会将整个路径作为单个参数传递给dirname,无论路径中包含什么特殊字符,都能保证dirname正确解析父目录。
内容的提问来源于stack exchange,提问作者PiRK
相关产品推荐
相关产品推荐

