我想使用参数读取输入$1
。我使用了这段代码:
while [ -n "$1" ]
do
case $1 in
-dt) do something;;
esac
shift
done
如果我在while指令中删除这些引号,为什么脚本会陷入永久循环?引号应该可以让您评估包含特殊字符(如普通字符)的字符串,但是我不会在输入中插入任何特殊字符,无论使用或不使用引号,它都有不同的行为
答案 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. [...]