我可以使用!=“”表示“不为空”吗?

时间:2019-02-07 14:10:52

标签: bash for-loop expr

因为bash向我返回!=无效,但这是基本运算符。

我尝试在循环的三个表达式中使用它

for (( c=1; ${!c}!=""; c++ )) do

2 个答案:

答案 0 :(得分:1)

您可以,但是,这并不是检查空参数的通常方法。

for((i=1; i<=$#; ++i)); do
   [[ "${!i}" ]] || echo "$0: Argument $i is empty" >&2
done

如果您不关心索引,只需遍历实际参数就更简单了。

for arg in "$@"; do
   [[ "$arg" ]] || echo "$0: Empty argument" >&2
done

注意我们如何将诊断信息打印为标准错误,并注意在消息中包括生成诊断信息的脚本的名称。

在实践中,您很少需要检查空的论点,但这也许是一次学习练习。

答案 1 :(得分:1)

您不能在(())中进行字符串比较,因为它只是算术。

您可以做的是这样,在增加计数器var后,字符串检查是单独的测试:

c=0
while (( c += 1 )) && [[ -n ${!c} ]]; do
    echo "$c ${!c}"
done