我正在尝试编写一个接受 -L
作为参数的 awk 脚本。
作为向您展示我想要什么的示例,这里有一个名为 awktest
的简单 awk 脚本:
#!/usr/bin/awk -f
BEGIN
{
print ARGV[1]
}
如果我从 shell 运行它:
$./awktest -w
我得到的输出是:
-w
这是我所期望的。它似乎适用于我放入除了 -L
中的任何内容。
如果我运行:
$./awktest -L
我得到:
awk: option requires an argument --L
当我期望 ARGV[1] 只包含 -L
时。这里发生了什么?为什么它在这种特定情况下会失败,我怎样才能让它在 ARGV 中接受 -L
?谢谢
最佳答案
将 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
语法,您需要另一层间接层来将脚本参数放在它们需要的位置。
关于linux - 如何将 "-L"传递给 awk 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53270876/