bash变量冒号扩展

发布时间 2023-07-26 16:40:03作者: thammer

参考自网道

Bash 提供四个特殊语法,跟变量的默认值有关,目的是保证变量不为空。

  • 如果变量为空则返回默认值,否则返回变量本来的值
${varname:-defaultval}

上面语法的含义是,如果变量varname存在且不为空,则返回它的值,否则返回defaultval。它的目的是返回一个默认值,比如${count:-0}表示变量count不存在时返回0。

类似的写法是:

if [ -n "$varname" ]; then
  echo $varname
else
  echo "defaultval"
fi
  • 如果变量为空则返回并设置默认值,否则返回变量原来的值
${varname:=defaultval}

上面语法的含义是,如果变量varname存在且不为空,则返回它的值,否则返回defaultval并且将它设为defaultval。它的目的是设置变量的默认值,比如${count:=0}表示变量count不存在时返回0,且将count设为0。和上面那条扩展不同是,会给变量varname做赋值操作。

类似写法是:

if [ -n "$varname" ]; then
  echo $varname
else
  varname="defaultval"
  echo "defaultval"
fi
  • 如果变量非空返回指定的值,否则返回空
${varname:+word}

上面语法的含义是,如果变量名存在且不为空,则返回word,否则返回空值。它的目的是测试变量是否存在,比如${count:+1}表示变量count存在时返回1(表示true),否则返回空值。

类似的写法是:

if [ -z "$varname" ]; then
  echo $varname
else
  echo "defaultval"
fi
  • 变量为空则打印指定信息,并退出脚本执行
${varname:?message}

上面语法的含义是,如果变量varname存在且不为空,则返回它的值,否则打印出varname: message,并中断脚本的执行。如果省略了message,则输出默认的信息“parameter null or not set.”。它的目的是防止变量未定义,比如${count:?"undefined!"}表示变量count未定义时就中断执行,抛出错误,返回给定的报错信息undefined!。