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

Shell变量存储目录路径时,引号内引用其子目录的正确写法是什么

Shell变量拼接路径写法正误判断

问题描述

给定变量:
target=/dir
现在要在rsync命令中指向该变量对应目录下的子文件夹,也就是要实现和以下命令完全一致的效果:
rsync "/source/" "/dir/subdir"
请问以下两种写法哪一个是正确的?

  • 写法1:rsync "/source/" "$target"/subdir
  • 写法2:rsync "/source/" "$target/subdir"

解答

结论

第二种写法是通用的正确写法。

原因解释

  • Shell中双引号的核心作用是将包裹内容作为单个参数传递,避免内部的空格、特殊字符被Shell拆分为多个参数,同时不会影响引号内部的变量正常展开。
  • 写法1仅把变量$target放在双引号内,当$target不含空格、后续子目录名也没有特殊字符时,运行结果和写法2看起来一致,但存在明显的适配漏洞:如果$target本身包含空格,或者后续的子目录路径存在空格、通配符等特殊字符,引号外的部分会被Shell拆分,导致命令接收的路径参数错误。
  • 写法2将完整的拼接路径全部放在双引号内,不管是变量部分还是后面的固定子目录部分存在特殊字符,都会被识别为单个完整的路径参数传递给rsync,覆盖所有合法路径的使用场景,是更规范安全的写法。

示例验证

如果变量设置为带空格的路径:target="/home/用户/工作目录",要指向的子目录为2024年项目资料:

  • 写法1展开后会被拆分为/home/用户/工作目录/2024年、项目资料两个无效参数,命令执行失败
  • 写法2展开后会传递完整路径/home/用户/工作目录/2024年项目资料,命令执行正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:48:03