ngt
这是允许awk 函数使用可选用户参数的好方法吗?
function nbstring(str, ngt) {
## Test whether string STR is non-blank.
## Return true when STR is non-blank.
if (length(gensub(/[[:blank:]]+/, "", "g", str)) > 0) {
if ( ngt == "dump" ) { print "return 1 for " str }
return 1
} else {
if ( ngt == "dump" ) { print "return 0 for " str }
return 0
}
}
我也用过这个条件
if (str && length(gensub(/[[:blank:]]+/, "", "g", str)) > 0) {
我得到了相同的结果。
所以我觉得没str &&
必要做吧?
答案1
您只是想测试字符串是否包含非空格吗?在任何 POSIX awk 中都是这样(不需要非 POSIX gensub()
,也不需要任何其他*sub()
函数,也不需要调用length()
):
function nbstring(str, ngt, rslt) {
## Test whether string STR is non-blank.
## Return true when STR is non-blank.
rslt = ( str ~ /[^[:blank:]]/ )
if ( ngt == "dump" ) {
printf "return %d for %s\n", rslt, str
}
return rslt
}
答案2
如果您正在寻找惯用的awk
代码,我可以提供这个,但这与您自己的建议并没有太大不同,
function nbstring(str, ngt, x) {
x = (length(gensub(/[[:blank:]]+/, "", "g", str)) > 0);
if (ngt == "dump") { printf "return %d for < %s >\n", x, str };
return x;
}
您可以调用nbstring(str, ngt)
or nbstring(str)
,或者实际上是nbstring()
,因为函数不计算参数。