En_*_*_t8 385 syntax bash conditional-operator
有没有办法做这样的事情
int a = (b == 5) ? c : d;
Run Code Online (Sandbox Code Playgroud)
用Bash?
gho*_*g74 434
三元运算符? :只是简短的形式if/else
case "$b" in
5) a=$c ;;
*) a=$d ;;
esac
Run Code Online (Sandbox Code Playgroud)
要么
[[ $b = 5 ]] && a="$c" || a="$d"
Run Code Online (Sandbox Code Playgroud)
Vla*_*mir 328
码:
a=$([ "$b" == 5 ] && echo "$c" || echo "$d")
Run Code Online (Sandbox Code Playgroud)
nem*_*ixx 131
如果条件仅仅是检查是否设置了变量,那么甚至还有一个更短的形式:
a=${VAR:-20}
Run Code Online (Sandbox Code Playgroud)
将分配给if a的值,否则它将为其分配默认值- 这也可以是表达式的结果.VARVAR20
正如Alex在评论中指出的那样,这种方法在技术上被称为"参数扩展".
iva*_*eev 67
if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi
Run Code Online (Sandbox Code Playgroud)
cond && op1 || op2其他答案中建议的表达式有一个固有的错误:如果op1具有非零退出状态,则op2默默地成为结果; 错误也不会在-e模式中被捕获.所以,这表达仅仅是安全的使用,如果op1不能失败(例如:,true如果一个内置的,或者不能够失败(如部门和操作系统调用)的任何操作变量赋值).
注意""引号.如果$b为空或具有空格,则第一对将防止语法错误.其他人会阻止将所有空格转换为单个空格.
小智 43
(( a = b==5 ? c : d )) # string + numeric
Run Code Online (Sandbox Code Playgroud)
Sir*_*hos 31
[ $b == 5 ] && { a=$c; true; } || a=$d
Run Code Online (Sandbox Code Playgroud)
这将避免在||之后执行该部分 在&&和||之间的代码时偶然发生 失败.
Jas*_*ich 13
这是另一个选项,您只需要指定一次分配的变量,无论您的分配是字符串还是数字都无关紧要:
VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`
Run Code Online (Sandbox Code Playgroud)
只是一个想法.:)
emu*_*emu 11
该让命令支持大多数基本算一个需要的:
let a=b==5?c:d;
Run Code Online (Sandbox Code Playgroud)
当然,这仅适用于分配变量; 它无法执行其他命令.
以下似乎适用于我的用例:
$ tern 1 YES NO
YES
$ tern 0 YES NO
NO
$ tern 52 YES NO
YES
$ tern 52 YES NO 52
NO
Run Code Online (Sandbox Code Playgroud)
并可以在如下的脚本中使用:
RESULT=$(tern 1 YES NO)
echo "The result is $RESULT"
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
对于三元运算符,我们可以在Shell脚本中使用以下三种方式:
[ $numVar == numVal ] && resVar="Yop" || resVar="Nop"
Or
resVar=$([ $numVar == numVal ] && echo "Yop" || echo "Nop")
Or
(( numVar == numVal ? (resVar=1) : (resVar=0) ))
Run Code Online (Sandbox Code Playgroud)
这是一个通用的解决方案,即
用数值比较测试
a=$(if [ "$b" -eq 5 ]; then echo "$c"; else echo "$d"; fi)
Run Code Online (Sandbox Code Playgroud)
使用字符串比较进行测试
a=$(if [ "$b" = "5" ]; then echo "$c"; else echo "$d"; fi)
Run Code Online (Sandbox Code Playgroud)
(ping -c1 localhost&>/dev/null) && { echo "true"; } || { echo "false"; }
Run Code Online (Sandbox Code Playgroud)
小智 5
bash中的三元条件也有一个非常相似的语法:
a=$(( b == 5 ? 123 : 321 ))
Run Code Online (Sandbox Code Playgroud)
不幸的是,据我所知,它仅适用于数字。
| 归档时间: |
|
| 查看次数: |
192466 次 |
| 最近记录: |