为何在循环中引用会产生不同的行为?

时间:2019-02-28 10:21:29

标签: bash

我想使用参数读取输入$1。我使用了这段代码:

while [ -n "$1" ]
do
   case $1 in
        -dt) do something;;
   esac
   shift
done

如果我在while指令中删除这些引号,为什么脚本会陷入永久循环?引号应该可以让您评估包含特殊字符(如普通字符)的字符串,但是我不会在输入中插入任何特殊字符,无论使用或不使用引号,它都有不同的行为

1 个答案:

答案 0 :(得分:1)

不带引号的情况下,当$1为空时,[ -n $1 ]将变为[ -n ],表示[ -n "-n" ]为TRUE。

根据bash manual

  

test[使用一组规则评估条件表达式    根据参数的数量。

0 arguments
    The expression is false.
1 argument
    The expression is true if and only if the argument is not null.
[...]