AWK オプションである引数を純粋な AWK スクリプトに直接渡すことはできますか?
スクリプトの例:
#!/usr/bin/env -S awk -f
BEGIN { if (ARGV[1] == "-h") print "whoop" }
whoop を印刷したいのです./myscript -h
が、AWK は最初に -h を取得し、代わりにその使用方法を印刷します。
実行は./myscript -- -h
動作しますが、-f のせいで、シェバン内の -- が動作しません。
代わりに AWK を使用したシェル スクリプトを使用できることはわかっています。
答え1
チャレンジのために、FreeBSDで実行することもできますenv
またはGNU環境>= 8.30 (OP によって既に想定されています) の場合:
#! /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
GNUをお持ちの場合はawk
これを使用できます
#!/usr/bin/gawk --exec
BEGIN { print "==>",ARGV[1],"<==" }
サンプル使用
./a -h
==> -h <==
テストはしていませんが、このmawk
バリアント-W exec
では の代わりにが使用されているようです--exec
。GNU もgawk
これをサポートしていると主張していますが、 では動作しません#!
。