如何使用while循环检查变量是否为空

How to use a while loop to check if a variable is empty or not

提问人:user2315104 提问时间:12/29/2021 最后编辑:taniususer2315104 更新时间:1/21/2023 访问量:5257

问:

我正在使用以下代码来检查变量是否为空。

我正在使用 while 循环,因为我需要在变量为空时继续循环。当变量设置为某个值时,循环应退出。

MR=[]
while [ -z "$MR" ]
do 
    echo "in while loop"
    sleep 10s
    MR="hi"
done 

出于某种原因,它根本没有执行。原因是什么?

bash 外壳

评论

0赞 chepner 12/29/2021
[]不是空数组。它是一个文字字符串,它不是空字符串。[]
0赞 chepner 12/29/2021
一个空数组将是(忽略实际上没有定义变量的事实;它只在名称上设置数组属性)。MR=()MR=()MR
0赞 user2315104 12/29/2021
还行。明白了。因此,如果任何特定命令返回文本字符串,您能否建议如何编写 while 循环。并继续循环,除非变量不是空的文字字符串
0赞 John Kugelman 12/29/2021
@chepner 定义变量和设置数组属性有什么区别?我不熟悉这种区别。
0赞 chepner 12/29/2021
MR=()基本上等同于。 仍将使用 进行测试,例如,将其显示为 未定义。declare -a MRMR[[ -v MR ]]declare -p MRdeclare -a MR=()

答:

5赞 KamilCuk 12/29/2021 #1

原因是什么?

MR变量不为空,它包含两个字符和 .[]

$ MR=[]
$ echo "$MR"
[]

因为它不为空,所以返回非零,所以从不执行。[ -z "$MR" ]while

而是将变量设置为 en 空字符串。

MR=
# or, does the same, but for some is more readable:
MR=""
# or
MR=''