在本地使用函数检查空白字符串
Using a function locally to checks blank strings
无法理解函数 myfunc
失败的原因。我在 src
和 dst
中放置了一个字符串,然后我收到消息
src is blank
dst is blank
这是代码
zblank ()
{
local s=""
declare -i f=1 num=0
[[ $s =~ ^[[:space:]]*$ ]] && num=1
return $num
}
myfunc
{
src="angio"
dst="angio"
(
function myzblank() { zblank "$@"; }
myzblank "$src" && printf '%s\n' "src is blank"
myzblank "$dst" && printf '%s\n' "dst is blank"
)
}
当您使用 return $num
时,结果被解释为退出状态。
退出状态0表示成功。
每个非零退出状态都意味着失败。
因此,当您仅在 [[ $s =~ ^[[:space:]]*$ ]]
时设置 num=1
时,除非发生这种情况,否则您将报告成功,因此执行 &&
b运行ch。
如果您希望 zblank
到 return 只有当您传递给它的变量为空时才成功,它应该看起来像:
zblank() { [[ =~ ^[[:space:]]*$ ]]; }
- 您不需要
return
:默认情况下,函数的 return 值是最后一个命令的值 运行。
- 您不需要
$s
:它不会比 </code> 更简洁或更清晰。</li>
<li>您不需要 <code>declare -i
:当在算术上下文中使用变量时,即使它之前是字符串,它的值也会被视为数字。
并且如果您希望它 return 仅在 </code> 是 <em> 而不是 </em> 全空格的情况下成功,您可以将其写为:</p>
<pre><code>znonblank() { ! [[ =~ ^[[:space:]]*$ ]]; }
...添加前导 !
是唯一需要的更改。
综上所述——您根本不需要像 [[ ]]
这样的 bash 扩展来执行此操作。 POSIX sh 对你在这里做的事情来说足够强大了:
zblank() {
case in
*[![:space:]]*) return 1;; # At least one non-space character exists
*) return 0;; # No non-spaces exist; success.
esac
}
无法理解函数 myfunc
失败的原因。我在 src
和 dst
中放置了一个字符串,然后我收到消息
src is blank
dst is blank
这是代码
zblank ()
{
local s=""
declare -i f=1 num=0
[[ $s =~ ^[[:space:]]*$ ]] && num=1
return $num
}
myfunc
{
src="angio"
dst="angio"
(
function myzblank() { zblank "$@"; }
myzblank "$src" && printf '%s\n' "src is blank"
myzblank "$dst" && printf '%s\n' "dst is blank"
)
}
当您使用 return $num
时,结果被解释为退出状态。
退出状态0表示成功。 每个非零退出状态都意味着失败。
因此,当您仅在 [[ $s =~ ^[[:space:]]*$ ]]
时设置 num=1
时,除非发生这种情况,否则您将报告成功,因此执行 &&
b运行ch。
如果您希望 zblank
到 return 只有当您传递给它的变量为空时才成功,它应该看起来像:
zblank() { [[ =~ ^[[:space:]]*$ ]]; }
- 您不需要
return
:默认情况下,函数的 return 值是最后一个命令的值 运行。 - 您不需要
$s
:它不会比</code> 更简洁或更清晰。</li> <li>您不需要 <code>declare -i
:当在算术上下文中使用变量时,即使它之前是字符串,它的值也会被视为数字。
并且如果您希望它 return 仅在 </code> 是 <em> 而不是 </em> 全空格的情况下成功,您可以将其写为:</p>
<pre><code>znonblank() { ! [[ =~ ^[[:space:]]*$ ]]; }
...添加前导 !
是唯一需要的更改。
综上所述——您根本不需要像 [[ ]]
这样的 bash 扩展来执行此操作。 POSIX sh 对你在这里做的事情来说足够强大了:
zblank() {
case in
*[![:space:]]*) return 1;; # At least one non-space character exists
*) return 0;; # No non-spaces exist; success.
esac
}