乐闻世界logo
搜索文章和话题

Shell 脚本中单引号和双引号的区别是什么?

3月6日 21:33

Shell 脚本中单引号和双引号的主要区别如下:

单引号 (' ')

  • 完全引用: 单引号内的所有字符都按字面意思处理
  • 禁止变量替换: 单引号内的变量不会被展开
  • 禁止命令替换: 单引号内的反引号或 $() 不会执行命令
  • 禁止转义: 单引号内的转义字符(如 \n, \t)不会被解释

示例:

bash
name='world' echo 'Hello $name' # 输出: Hello $name echo 'Today is $(date)' # 输出: Today is $(date) echo 'Line1\nLine2' # 输出: Line1\nLine2

双引号 (" ")

  • 部分引用: 双引号内的特殊字符会被解释
  • 允许变量替换: 双引号内的变量会被展开为实际值
  • 允许命令替换: 双引号内的反引号或 $() 会执行命令
  • 允许转义: 双引号内的转义字符会被解释

示例:

bash
name='world' echo "Hello $name" # 输出: Hello world echo "Today is $(date)" # 输出: Today is Fri Feb 28 12:38:28 CST 2026 echo "Line1\nLine2" # 输出: Line1\nLine2(\n 在 echo 中需要 -e 参数)

反引号 ( ) 和 $()

  • 命令替换: 用于执行命令并返回输出结果
  • 推荐使用 $(): 更易读,支持嵌套

示例:

bash
files=`ls` # 传统写法 files=$(ls) # 推荐写法 files=$(ls $(pwd)) # 支持嵌套

使用建议

  1. 需要变量替换时使用双引号: echo "Hello $name"
  2. 需要字面输出时使用单引号: echo '$HOME'
  3. 命令替换优先使用 $(): result=$(command)
  4. 字符串拼接: echo "Hello" "$name"echo "Hello $name"
标签:Shell