iF任何人都可以解释下面代码的含义(" -z $ {1 + x}"),然后我会很高兴。 我有一部分代码,我试图理解它。我知道它用字符串检查一些东西,但不知道到底是什么。
if [ -z ${1+x} ]; then
error "Please provide some information" 1;
fi
Thansk提前
答案 0 :(得分:2)
[ ]
构造执行测试。如果测试为"为真"则返回0;如果测试为"为"则返回非零值。
-z
测试接受一个参数,并返回" true"如果参数是一个空(零长度)字符串。
" $ {1 + x}"如果设置了位置参数1,扩展会扩展到给定值(在这种情况下为x
,但您可以放置任何所需的值)。如果已为其分配了值(即使此值为空字符串),则置位,否则取消设置。如果未设置位置参数,则扩展会生成空字符串。
请注意,它也适用于变量名称。您可以使用" $ {MYVAR + x}"例如。
如果没有将值作为参数1传递给脚本或函数,则整个if
块将显示错误消息。但是如果传递了空值(即myscript ""
),则不会出现错误消息。
答案 1 :(得分:1)
可以通过示例
更好地解释案例1:foo
未设置
unset foo
if [[ ${foo+isset} = isset ]]; then
echo "foo is set..."
else
echo "foo is not set..."
fi
运行它会产生,
bash -x script.sh
+ unset foo
+ [[ '' = isset ]]
+ echo 'foo is not set...'
foo is not set...
案例2:foo
已设置且为空
$ bash -x script.sh
+ foo=
+ [[ isset = isset ]]
+ echo 'foo is set...'
foo is set...
案例3:foo
已设置且具有有效值
$ bash -x script.sh
+ foo=something
+ [[ isset = isset ]]
+ echo 'foo is set...'
foo is set...
基本上${paramter+word}
的作用是
如果参数未设置或为空,表单将扩展为空。如果已设置,则不会扩展为参数的值,但是对于某些文本,您可以指定:
所以,
if [ -z ${1+x} ]; then
检查位置参数$1
是否设置为值,在这种情况下,它将被赋值x
并检查if [ -z 'x' ]
是否会失败,但如果{{ 1}}为空,扩展为$1
,这意味着if [ -z '' ]
断言为真。