Bashには$0
スクリプト名がありますが、awkは次の内容でmyscript.awkというスクリプトを生成します。
#!/usr/bin/awk -f
BEGIN{ print ARGV[0] }
実行すると、「awk」のみが印刷されます。また、i> 0のARGV [i]は、コマンドラインのスクリプト引数にのみ使用されます。それでは、スクリプト名(この場合は「myscript.awk」)を印刷するにはどうすればよいですか?
ベストアンサー1
CygwinのbashでGNU awk 4.1.3を使用する:
$ cat tst.sh
#!/bin/awk -f
BEGIN { print "Executing:", ENVIRON["_"] }
$ ./tst.sh
Executing: ./tst.sh
携帯性がどれほど良いのか全く知らなかった。しかし、いつものように、awkスクリプトを実行するためにシェルスクリプトでshebangを使用するわけではありません。なぜなら、これは可能な機能を奪うだけだからです。簡単に次のようにしてください。
$ cat tst2.sh
awk -v cmd="$0" '
BEGIN { print "Executing:", cmd }
' "$@"
$ ./tst2.sh
Executing: ./tst2.sh
最後は、すべてのプラットフォームのすべてのシェルで最新のawkで動作します。