【发布时间】:2022-01-27 08:38:06
【问题描述】:
我正在使用以下代码来检查变量是否为空。我正在使用 while 循环,因为我需要继续循环,直到变量为空。将变量设置为值的那一刻,循环应该退出。
MR=[]
while [ -z "$MR" ]
do
echo "in while loop"
sleep 10s
MR="hi"
done
由于某种原因,它根本没有执行。是什么原因?
【问题讨论】:
-
[]不是一个空数组。这是一个文字字符串[],不是空字符串。 -
一个空数组将是
MR=()(忽略MR=()实际上并没有定义变量的事实;它只是在名称MR上设置数组属性)。 -
好的。知道了。如果任何特定命令返回文字字符串,您能否建议如何编写 while 循环。并继续循环,除非变量不是空的文字字符串
-
@chepner 定义变量和设置数组属性有什么区别?我不熟悉这种区别。
-
MR=()基本上等价于declare -a MR。例如,MR仍将使用[[ -v MR ]]测试为未定义,但declare -p MR将显示为declare -a MR=()。