これは、文字列"NF"
が に変換されるため0
です。
awk
変換プロセスでは、有効な数値に変換できない文字列は に評価される0
ため、 が得られますprint $0
。
からman awk
:
変数の型付けと変換
Variables and fields may be (floating point) numbers, or
strings, or both. How the value of a variable is inter‐
preted depends upon its context. If used in a numeric
expression, it will be treated as a number; if used as a
string it will be treated as a string.
...
When a string must be converted to a number, the conversion
is accomplished using strtod(3).
そしてからman strtod
:
戻り値
These functions return the converted value, if any.
...
If no conversion is performed, zero is returned and the
value of nptr is stored in the location referenced by
endptr.
@Ed Mortonが指摘したように、あなたが望むことをするために、あなたは書くことができます:
#!/bin/bash
awk -v awkvar=$1 '{print (awkvar == "NF" ? $NF : $awkvar)}'
ただし、 が整数に変換可能な文字列でない場合と である$0
場合の両方で出力されることに注意してください。awkvar
"NF"
より適切なチェックは次のようになります。
#!/bin/bash
awk -v awkvar=$1 '{
if (awkvar == "NF") { print; }
else if (int(awkvar) != 0) { print $awkvar; }
else { print "Error: invalid field specifier;" }
}'
int(awkvar) <= NF
また、印刷を避けるために -- をチェックすることもできます""
。