Bash使用默认值从命令分配变量

时间:2015-03-11 18:30:24

标签: bash

如果你有:

val="bar"

是否有更简单的方法来执行以下操作:

# get value from foo
result=`foo boom baz`

# if we have non falsy value from foo, store it in val:

if [ $result ] ; then
  val=$result
fi

#else val remains at "bar"

基本上我正在寻找与以下C语句等效的东西:

val=foo() || val;

3 个答案:

答案 0 :(得分:3)

你可以这样做:

val="bar"

result=$(foo boom baz)
val=${result:-$val}       # Assign result if not empty, otherwise val
                          # similar to C  val = *result ? result : val;

echo "val is now $val"

答案 1 :(得分:1)

假设来自foo的返回代码是一个有效的指示,表明它是否会输出填充result的内容,您可以使用:

if result=`foo boom baz`; then
  val=$result
fi

您也可以将两条原始线组合在一起(虽然我不建议这样做):

if result=`foo boom baz`; [ $result ] ; then
  val=$result
fi

答案 2 :(得分:1)

我会稍微改写一下,以便更明确地说明默认值:

default=bar
val=$(foo boom baz)
: ${val:="$default"}      # use the : command to allow side effects to occur
echo "val is now: $val"

测试:没有foo

val is now: bar

测试:使用foo() { echo qux; }

val is now: qux