bash-if命令的说明

bash-if命令的说明,bash,if-statement,Bash,If Statement,如果有人能解释一下下面的代码是什么意思(“-z${1+x}”),我会很高兴的。 我有一部分代码,我正在努力理解它。我知道它用字符串检查某些东西,但不知道具体是什么 if [ -z ${1+x} ]; then error "Please provide some information" 1; fi Thansk提前执行测试。如果测试为“真”,则返回0;如果测试为“假”,则返回非零值 -z测试接受一个参数,如果参数是空(零长度)字符串,则返回“true” 如果设置了位置参数1,则“$

如果有人能解释一下下面的代码是什么意思(“-z${1+x}”),我会很高兴的。 我有一部分代码,我正在努力理解它。我知道它用字符串检查某些东西,但不知道具体是什么

if [ -z ${1+x} ]; then 
    error "Please provide some information" 1;
fi

Thansk提前执行测试。如果测试为“真”,则返回0;如果测试为“假”,则返回非零值

-z
测试接受一个参数,如果参数是空(零长度)字符串,则返回“true”

如果设置了位置参数1,则“${1+x}”扩展将扩展到给定的值(
x
,但您可以在其中放置任何需要的内容)。如果已为其赋值(即使该值为空字符串),则会设置该值,否则会取消设置该值。如果未设置位置参数,则展开将生成空字符串

请注意,它也适用于变量名。例如,可以使用“${MYVAR+x}”


如果未将任何值作为参数1传递给脚本或函数,则整个
if
块将显示错误消息。但如果传递了空值(即
myscript”“
),则不会出现错误消息。

可以用一个示例更好地解释

案例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...
所以基本上,
${parameter+word}
所做的是

如果参数未设置或为空,则窗体将扩展为空。如果已设置,则它不会扩展到参数值,而是扩展到可以指定的某些文本:

所以

检查位置参数
$1
是否设置为值,在这种情况下,它将被分配一个值
x
,如果[-z'x']将失败,则检查
,但如果
$1
为空,则扩展将
如果[-z']
这意味着
测试
断言为真。

将鼠标悬停在不同的部分上以获得详细的解释
if [ -z ${1+x} ]; then