Shell 脚本中单引号和双引号的主要区别如下:
单引号 (' ')
- 完全引用: 单引号内的所有字符都按字面意思处理
- 禁止变量替换: 单引号内的变量不会被展开
- 禁止命令替换: 单引号内的反引号或 $() 不会执行命令
- 禁止转义: 单引号内的转义字符(如 \n, \t)不会被解释
示例:
bashname='world' echo 'Hello $name' # 输出: Hello $name echo 'Today is $(date)' # 输出: Today is $(date) echo 'Line1\nLine2' # 输出: Line1\nLine2
双引号 (" ")
- 部分引用: 双引号内的特殊字符会被解释
- 允许变量替换: 双引号内的变量会被展开为实际值
- 允许命令替换: 双引号内的反引号或 $() 会执行命令
- 允许转义: 双引号内的转义字符会被解释
示例:
bashname='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 参数)
反引号 ( ) 和 $()
- 命令替换: 用于执行命令并返回输出结果
- 推荐使用 $(): 更易读,支持嵌套
示例:
bashfiles=`ls` # 传统写法 files=$(ls) # 推荐写法 files=$(ls $(pwd)) # 支持嵌套
使用建议
- 需要变量替换时使用双引号:
echo "Hello $name" - 需要字面输出时使用单引号:
echo '$HOME' - 命令替换优先使用 $():
result=$(command) - 字符串拼接:
echo "Hello" "$name"或echo "Hello $name"