Awk

繞過 AWK 將選項傳遞給 AWK 腳本

  • March 13, 2020

我可以將恰好是 AWK 選項的參數直接傳遞給純 AWK 腳本嗎?

範例腳本:

#!/usr/bin/env -S awk -f
BEGIN { if (ARGV[1] == "-h") print "whoop" }

我想./myscript -h列印哇。但是 AWK 首先獲取 -h 並列印它的用法。

跑步./myscript -- -h有效,但我無法獲得 - 因為 -f 而在 shebang 工作。

我知道我可以使用帶有 AWK 的 shell 腳本。

為了挑戰,可以使用 FreeBSDenv或使用 GNU env >= 8.30(已經由 OP 假設)在 shebang 中完成:

#! /usr/bin/env -S sh -c 'exec awk -f "$0" -- "$@"'
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
./myscript -h 1 2 3
-h
1
2
3

但這並不意味著這是一個好主意。

你可以試試這個,而不是:

#! /bin/sh
BEGIN { 2>"/dev/null"
       exec awk -f "$0" "--" "$@"
}
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }

這假設BEGIN您的PATH.

引用自:https://unix.stackexchange.com/questions/572637