如果你有:
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;
答案 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