如何将“ -L”传递给awk脚本?

时间:2018-11-12 22:14:56

标签: linux bash shell awk

我正在尝试编写一个接受-L作为参数的awk脚本。

作为显示我想要的示例,下面是一个名为awktest的简单awk脚本:

#!/usr/bin/awk -f 
BEGIN 
{
   print ARGV[1]
}

如果我是从shell运行的:

$./awktest -w

我得到输出:

-w

这是我的期望。

如果我跑步:

-L

我得到:

$./awktest -L

当我期望ARGV [1]仅包含awk: option requires an argument --L 时。这里发生了什么?为什么在此特定情况下失败,如何使它在ARGV中接受-L?谢谢

1 个答案:

答案 0 :(得分:4)

将awk脚本包装在shell脚本中:

#!/bin/sh
awk 'BEGIN {
      print ARGV[1]
     }' "$@"

示例:

$ ./awktest -L
-L

问题是,当使用shebang行运行脚本时,指定的程序将以脚本名称和脚本参数作为额外的命令行参数运行。换句话说,使用原始的awktest脚本,运行awktest -L会变成/usr/bin/awk -f /path/to/awktest -L,因此awk会将-L视为其参数,而不是实际脚本的参数。

如果您不想使用./awktest -- -L语法,则需要另一层间接方式将脚本参数放在需要的地方。