我在bash (3.00) shell脚本中有一大堆关于变量的测试,如果变量没有设置,那么它会分配一个默认值,例如:

if [ -z "${VARIABLE}" ]; then 
    FOO='default'
else 
    FOO=${VARIABLE}
fi

我似乎记得在一行中做这件事有一些语法,类似于三元运算符,例如:

FOO=${ ${VARIABLE} : 'default' }

(虽然我知道这行不通……)

是我疯了吗,还是真的有这样的东西存在?


当前回答

可以像这样链接默认值:

DOCKER_LABEL=${GIT_TAG:-${GIT_COMMIT_AND_DATE:-latest}}

例如,如果$GIT_TAG不存在,则取$GIT_COMMIT_AND_DATE -如果不存在,则取"latest"

其他回答

这里有一个例子

#!/bin/bash

default='default_value'
value=${1:-$default}

echo "value: [$value]"

将其保存为script.sh并使其可执行。 不带参数运行它

./script.sh
> value: [default_value]

用参数运行它

./script.sh my_value
> value: [my_value]

还有一种更简洁地表达“if”结构的方法:

FOO='default'
[ -n "${VARIABLE}" ] && FOO=${VARIABLE}

可以像这样链接默认值:

DOCKER_LABEL=${GIT_TAG:-${GIT_COMMIT_AND_DATE:-latest}}

例如,如果$GIT_TAG不存在,则取$GIT_COMMIT_AND_DATE -如果不存在,则取"latest"

其实跟你贴出来的很像。您可以使用Bash参数展开来实现这一点。

获取指定的值,如果缺少则默认:

FOO="${VARIABLE:-default}"  # If variable not set or null, use default.
# If VARIABLE was unset or null, it still is after this (no assignment done).

或者同时将default赋值给VARIABLE:

FOO="${VARIABLE:=default}"  # If variable not set or null, set it to default.

你甚至可以使用其他变量的默认值

有一个文件defvalue.sh

#!/bin/bash
variable1=$1
variable2=${2:-$variable1}

echo $variable1
echo $variable2

执行./ value.sh first-value - second-value output

first-value
second-value

执行./ value.sh first-value output

first-value
first-value