检查传递给Bash脚本的第一个参数是否已设置?

4
我想要确认我的脚本中传递的第一个参数是否已设定。我使用了这里提供的方法进行测试: 如何检查Bash中的变量是否设置? 以下是我的脚本:
var=$1
if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi

假设我在不带任何参数的情况下运行它:
ole@MKI:./test.sh
var is set to ''

假设我运行它并传入一个参数:
ole@MKI:./test.sh foo
var is set to 'foo'

在这两种情况下,它都没有报告变量未设置的情况。
有何想法?
谢谢, Ole
2个回答

4
问题出在这行代码上:
var=$1

这段代码设置了变量var,无论$1是否已经设置。解决方法是测试$1

if [ -z ${1+x} ]; then echo "var is unset"; else echo "var is set to '$1'"; fi

这种方法是可行的:
$ test.sh
var is unset
$ test.sh a
var is set to 'a'

3
即使在运行脚本时没有提供任何参数,var变量也会被设置。它被分配为空字符串。
Shell还将$#特殊参数设置为参数数量。
试一试这个:
if [[ $# = 0 ]] ; then printf "no parameter\n"; exit 1; else printf "At least one parameter\n"; var="${1}"; fi

如果您继续使用其他附加参数,例如选项,则可以考虑使用来自 The Open Group Base Specifications Issue 7 getopts-解析实用程序选项

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接