You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中$0为何需加引号?dirname参数写法疑问

为什么要给$0添加引号?

核心原因是为了处理脚本路径中包含空格、特殊字符或通配符的场景,避免Shell错误地拆分参数:

  • $0代表当前脚本的完整路径,如果路径里有空格(比如/home/user/my scripts/husky.sh)、特殊字符(如!)或通配符(如*),不加引号的话,Shell会执行单词拆分和路径扩展:
    • 单词拆分:把路径按空格分割成多个独立的参数传给dirname
    • 路径扩展:把通配符(如*)替换成当前目录下匹配的文件名

举个实际例子:
假设脚本路径是/tmp/my script.sh:

  • 用dirname -- "$0":$0被完整传递为/tmp/my script.sh,dirname正确返回/tmp,最终拼接路径为/tmp/_/husky.sh,能正常加载脚本。
  • 用dirname -- $0:Shell会把$0拆成/tmp/my和script.sh两个参数传给dirname,dirname会分别处理这两个路径,输出/tmp和.(当前目录),$()捕获的输出会变成/tmp .,最终拼接出的路径/tmp ./_/husky.sh是无效的,导致找不到目标脚本。

另外,--的作用是告诉dirname后面的内容都是路径参数,避免路径以-开头时被误当作命令选项,但你的问题核心是引号的作用,重点还是防止参数拆分和扩展。

总结:给$0套上双引号,能确保脚本路径始终作为一个完整的参数传递,无论路径包含什么特殊字符,都能让dirname正确解析出脚本所在目录,保证后续_/husky.sh的加载路径正确。

内容的提问来源于stack exchange,提问作者chrikrah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:10:55