我试图看看是否设置传递给我的脚本的第一个参数。 我用这里的指令来创build一个testing: 如何检查一个variables是否在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'
在任何情况下,它都会报告var是未设置的。
思考?
TIA,Ole
问题在于这一行:
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'
即使脚本运行时没有提供参数,也会设置var
变量。 它被分配了空字符串。
shell还将$#
特殊参数设置为参数的数量。
试试这个:
if [[ $# = 0 ]] ; then printf "no parameter\n"; exit 1; else printf "At least one parameter\n"; var="${1}"; fi
如果继续使用其他附加参数(如选项),则可以考虑使用“开放组基本规范”第7期中的getopts-parse实用程序选项