解释bash if命令

时间:2017-02-08 10:54:08

标签: bash if-statement

iF任何人都可以解释下面代码的含义(" -z $ {1 + x}"),然后我会很高兴。 我有一部分代码,我试图理解它。我知道它用字符串检查一些东西,但不知道到底是什么。

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

Thansk提前

2 个答案:

答案 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 '' ]断言为真。