使用本地函数检测空字符串时myfunc运行异常问题咨询
问题原因
- 函数定义语法错误:Bash 中函数声明有两种合法格式,要么带
function关键字,要么函数名后加(),你当前写的myfunc {不符合语法规则,函数本身无法正常被识别执行。 - 返回值判断逻辑颠倒:你写的
zblank函数逻辑是:传入字符串为空/全空白时返回1,非空时返回0。而Shell中&&规则是只有前序命令退出码为0时才会执行后续语句,现在你传入的src、dst都是非空值,myzblank返回0,刚好触发了空白提示的打印,和预期逻辑完全相反。 - 额外小问题:
zblank中声明的declare -i f=1全程未使用,属于冗余代码;printf的换行符写为了硬换行,规范写法应该用\n转义。
修正后代码
zblank () { local s="$1" declare -i num=0 [[ $s =~ ^[[:space:]]*$ ]] && num=1 return $num } # 修正函数定义语法,补充() myfunc() { src="angio" dst="angio" ( function myzblank() { zblank "$@"; } # 修正判断逻辑,用||表示前序返回非0(即字符串空白)时才打印提示 myzblank "$src" || printf '%s\n' "src is blank" myzblank "$dst" || printf '%s\n' "dst is blank" ) }
内容的提问来源于stack exchange,提问作者Angio
相关产品推荐
相关产品推荐

