【问题标题】:How to use a while loop to check if a variable is empty or not如何使用while循环检查变量是否为空
【发布时间】: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=()

标签: bash shell


【解决方案1】:

是什么原因?

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多