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()