我可以取得直接傳遞給純 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 腳本來代替。
答案1
為了迎接挑戰,可以使用 FreeBSD 來完成env
或使用 GNU環境>= 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
.
答案2
如果你有 GNUawk
你可以使用這個
#!/usr/bin/gawk --exec
BEGIN { print "==>",ARGV[1],"<==" }
樣品使用
./a -h
==> -h <==
我還沒有測試過它,但該mawk
變體似乎使用-W exec
而不是--exec
. GNUgawk
聲稱也支持這一點,但它不適用於#!
.