我想在我的 bashscript 中使用 awk,而这一行显然不起作用:
line="foo bar"
echo $line | awk '{print $1}'
我该如何逃跑$1
,所以它不会被脚本的第一个参数替换?
您的脚本(在 awk 脚本周围带有单引号)将按预期工作:
$ cat script-single
#!/bin/bash
line="foo bar"
echo $line | awk '{print $1}'
$ ./script-single test
foo
但是,以下内容将中断(脚本将输出一个空行):
$ cat script-double
#!/bin/bash
line="foo bar"
echo $line | awk "{print $1}"
$ ./script-double test
注意程序周围的双引号awk
。
因为双引号扩展了$1
变量,所以 awk 命令将获取脚本{print test}
,该脚本打印 awk 变量的内容test
(为空)。这是一个脚本,它显示:
$ cat script-var
#!/bin/bash
line="foo bar"
echo $line | awk -v test=baz "{print $1}"
$ ./script-var test
baz
相关阅读:Bash 参考手册 - 引用和外壳扩展
如目前所写, $1 不会被替换(因为它在单引号字符串中,bash 不会解析它)
如果你写awk "{print $1}"
,bash 将扩展$1
双引号内的字符串
注意变量扩展规则依赖于最外层的引用,所以$1
in"awk '{print $1}'"
会被扩展