有没有办法做这样的事情
int a = (b == 5) ? c : d;
用Bash?
#1楼
如果条件只是检查是否设置了变量,那么甚至还有一个较短的形式:
a=${VAR:-20}
将要分配给a的值VAR如果VAR被设置,否则将分配给它的默认值20 -这也可以是一个表达的结果。
正如Alex在评论中指出的那样,这种方法在技术上被称为“参数扩展”。
#2楼
[ $b == 5 ] && { a=$c; true; } || a=$d
这将避免在||之后执行该部分 在&&和||之间的代码时偶然发生 失败。
#3楼
这是另一个选项,您只需要指定一次分配的变量,无论您的分配是字符串还是数字都无关紧要:
VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`
只是一个想法。 :)
#4楼
if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi
cond && op1 || op2 在其他答案中建议的cond && op1 || op2表达式有一个固有的错误:如果op1具有非零退出状态,则op2默默地成为结果; 在-e模式下也不会捕获错误。 因此,如果op1永远不会失败,那么该表达式只能安全使用(例如:如果内置或变量赋值没有任何可能失败的操作(如除法和OS调用),则为true )。
注意""引号。 如果$b为空或具有空格,则第一对将防止语法错误。 其他人会阻止将所有空格转换为单个空格。
#5楼
以下似乎适用于我的用例:
例子
$ tern 1 YES NO
YES
$ tern 0 YES NO
NO
$ tern 52 YES NO
YES
$ tern 52 YES NO 52
NO
并可以在如下的脚本中使用:
RESULT=$(tern 1 YES NO)
echo "The result is $RESULT"
燕鸥
function show_help()
{
echo ""
echo "usage: BOOLEAN VALUE_IF_TRUE VALUE_IF_FALSE {FALSE_VALUE}"
echo ""
echo "e.g. "
echo ""
echo "tern 1 YES NO => YES"
echo "tern 0 YES NO => NO"
echo "tern "" YES NO => NO"
echo "tern "ANY STRING THAT ISNT 1" YES NO => NO"
echo "ME=$(tern 0 YES NO) => ME contains NO"
echo ""
exit
}
if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$3" ]
then
show_help
fi
# Set a default value for what is "false" -> 0
FALSE_VALUE=${4:-0}
function main
{
if [ "$1" == "$FALSE_VALUE" ]; then
echo $3
exit;
fi;
echo $2
}
main "$1" "$2" "$3"