http://www.skeeve.com/gawk/gawk-4.1.65.tar.gz中提供的gawk 4.2.0的Beta版本是的主要版本,具有许多重要的新功能。
我之前询问过What is the behaviour of FS = " " in GNU Awk 4.2?,现在我注意到全新的typeof()
功能要弃用isarray()
:
从4.1.4变为4.2.0
- 新的
醇>typeof()
函数可用于指示变量或数组元素是否为数组,正则表达式,字符串或数字。不推荐isarray()
函数支持typeof()
。
我可以涵盖四种情况:字符串,数字,数组和未分配:
$ awk 'BEGIN {print typeof("a")}'
string
$ awk 'BEGIN {print typeof(1)}'
number
$ awk 'BEGIN {print typeof(a[1])}'
unassigned
$ awk 'BEGIN {a[1]=1; print typeof(a)}'
array
然而,我很难得到" regexp"因为我没有尝试达到这一点并总是产生"数字":
$ awk 'BEGIN {print typeof(/a/)}'
number
$ awk 'BEGIN {print typeof(/a*/)}'
number
$ awk 'BEGIN {print typeof(/a*d/)}'
number
$ awk 'BEGIN {print typeof(!/a*d/)}'
number
$ awk -v var="/a/" 'BEGIN{print typeof(var)}'
string
$ awk -v var=/a/ 'BEGIN{print typeof(var)}'
string
如何将变量定义为" regexp"?
我注意到了之前的一颗子弹:
- Gawk现在支持强类型的regexp常量。这些常量看起来像@ / ... /。您可以将它们分配给变量,将它们传递给函数,在〜,!〜和switch语句的case部分中使用它们。手册中提供了更多详细信息。
醇>
尝试了一下,但没有运气:
$ awk -v pat=@/a/ '{print typeof(pat)}' <<< "bla ble"
string
答案 0 :(得分:2)
typeof(/a/)
正在运行typeof()
$0 ~ /a/
的结果,这是一个数字。我自己还没试过这个,但我希望这是你想要的:
typeof(@/a/)
和
var = @/a/
typeof(var)
这样可行:
$ awk 'BEGIN {print typeof(@/a/)}'
regexp
$ awk 'BEGIN {var=@/a/; print typeof(var)}'
regexp