如何检查awk变量的类型?
How to check the type of an awk variable?
gawk 4.2.0 的测试版 http://www.skeeve.com/gawk/gawk-4.1.65.tar.gz 可用,是 一个主要版本,具有许多重要的新功能。
我之前问过 , and now I noticed the brand new typeof()
function to deprecate :
Changes from 4.1.4 to 4.2.0
- The new
typeof()
function can be used to indicate if a variable or array element is an array, regexp, string or number. The isarray()
function is deprecated in favor of 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
但是,我很难获得“正则表达式”,因为 none 我的尝试达到了那个并且总是产生“数字”:
$ 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
如何让一个变量被定义为“正则表达式”?
我注意到上一个项目符号:
- Gawk now supports strongly typed regexp constants. Such constants look like @/.../. You can assign them to variables, pass them to functions, use them in ~, !~ and the case part of a switch statement. More details are provided in the manual.
尝试了一下,但没有成功:
$ awk -v pat=@/a/ '{print typeof(pat)}' <<< "bla ble"
string
typeof(/a/)
是 运行 typeof()
对 [=15=] ~ /a/
的结果,这是一个数字。我自己还没有尝试过,但我希望这就是您要找的东西:
typeof(@/a/)
和
var = @/a/
typeof(var)
所以这有效:
$ awk 'BEGIN {print typeof(@/a/)}'
regexp
$ awk 'BEGIN {var=@/a/; print typeof(var)}'
regexp
gawk 4.2.0 的测试版 http://www.skeeve.com/gawk/gawk-4.1.65.tar.gz 可用,是 一个主要版本,具有许多重要的新功能。
我之前问过 typeof()
function to deprecate
Changes from 4.1.4 to 4.2.0
- The new
typeof()
function can be used to indicate if a variable or array element is an array, regexp, string or number. Theisarray()
function is deprecated in favor oftypeof()
.
我可以涵盖四种情况:字符串、数字、数组和未分配:
$ 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
但是,我很难获得“正则表达式”,因为 none 我的尝试达到了那个并且总是产生“数字”:
$ 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
如何让一个变量被定义为“正则表达式”?
我注意到上一个项目符号:
- Gawk now supports strongly typed regexp constants. Such constants look like @/.../. You can assign them to variables, pass them to functions, use them in ~, !~ and the case part of a switch statement. More details are provided in the manual.
尝试了一下,但没有成功:
$ awk -v pat=@/a/ '{print typeof(pat)}' <<< "bla ble"
string
typeof(/a/)
是 运行 typeof()
对 [=15=] ~ /a/
的结果,这是一个数字。我自己还没有尝试过,但我希望这就是您要找的东西:
typeof(@/a/)
和
var = @/a/
typeof(var)
所以这有效:
$ awk 'BEGIN {print typeof(@/a/)}'
regexp
$ awk 'BEGIN {var=@/a/; print typeof(var)}'
regexp