添加到迭代中的零长度变量不起作用

添加到迭代中的零长度变量不起作用

问题很简单。我在 bash 中有以下脚本:

#!/bin/bash

a=`echo " 1 2 3 hello " | egrep -o "1"`
b=`echo " 1 2 3 hello " | egrep -o "2"`
c=`echo " 1 2 3 hello " | egrep -o "4"`

echo $a
echo $b
echo $c
echo "--"

echo "first print : "

if [ -z $c ]; then echo "zero length"; fi # condition met

echo "second print : "

for i in $a $b $c; do

if [ -z $i ]; then echo "zero length" # does not recognize variable $c , no print

fi
done

有 3 个变量,a、b 和 c。c 是唯一一个空变量,里面的字符串长度为零。第一个“if”证明了这一点,但是,当我尝试将变量添加到“for”迭代时,条件无法识别。我该如何让它工作?我需要这样做,因为我有很多变量需要在单个循环中测试,而不是对每个变量都使用单个“if”。非常感谢。

答案1

总是引用你的变量扩展1

if [ -z "$c" ]; then echo "zero length"; fi 

echo "second print : "

for i in "$a" "$b" "$c"; do

if [ -z "$i" ]; then echo "zero length"

fi

done

$c为空时,则为$a $b $c仅包含两个项目的列表,因此仅执行两次迭代。您可以通过运行来看到这一点set -x。在您的原始版本中:

second print :
++ for i in $a $b $c
++ '[' -z 1 ']'
++ for i in $a $b $c
++ '[' -z 2 ']'

而正确引用的版本是:

second print :
++ for i in "$a" "$b" "$c"
++ '[' -z 1 ']'
++ for i in "$a" "$b" "$c"
++ '[' -z 2 ']'
++ for i in "$a" "$b" "$c"
++ '[' -z '' ']'
++ echo 'zero length'
zero length

  1. 有一些例外 - 例如什么时候需要双引号?

相关内容