awk
在 awk 命令中,单引号 (') 和双引号 (") 的使用方式不同,主要原因如下:
1. Shell 变量扩展
- 单引号 完全禁止 Shell 变量扩展,
awk直接按字符串原样处理。 - 双引号 允许 Shell 变量扩展,
awk里的$1可能会被 Shell 误解为 Shell 变量,而不是awk的第一个字段。
示例:
var="hello"
awk '{print $1}' file.txt # 正确,$1 由 awk 解析
awk "{print $1}" file.txt # 错误,$1 可能会被 Shell 解析为环境变量
当使用双引号时,Shell 可能会试图解析 $1,但 awk 需要 $1 作为字段标识符,所以会导致错误。
2. Shell 特殊字符解析
Shell 在解析命令时:
- 单引号 里面的内容不会被 Shell 解析,原样传给
awk。 - 双引号 里面的
$、`、"等特殊字符仍会被 Shell 解析。
示例:
echo "hello world" | awk '{print $2}' # 输出:world ✅(正确)
echo "hello world" | awk "{print $2}" # 可能报错或输出空 ❌
3. 何时使用双引号
如果你需要在 awk 代码中使用 Shell 变量,可以用双引号+变量扩展:
col=2
awk "{print \$$col}" file.txt # 需要转义 $
或者用单引号+外部拼接:
col=2
awk '{print $'"$col"'}' file.txt # 正确,拼接后是 {print $2}
结论
一般情况下,awk 命令中的代码块建议用单引号,以防止 Shell 误解析 $1 等字段变量。
但如果需要使用 Shell 变量,就得用双引号,并小心处理变量展开的问题。

浙公网安备 33010602011771号