linux shell 三元运算符,语法 - Bash中的三元运算符(?:)
语法 - Bash中的三元运算符(?:)
有没有办法做这样的事情
int a = (b == 5) ? c : d;
用Bash?
14个解决方案
346 votes
ternary operator ? :是if/else的缩写
case "$b" in
5) a=$c ;;
*) a=$d ;;
esac
要么
[[ $b = 5 ]] && a="$c" || a="$d"
ghostdog74 answered 2019-01-30T08:38:03Z
265 votes
码:
a=$([ "$b" == 5 ] && echo "$c" || echo "$d")
Vladimir answered 2019-01-30T08:38:20Z
107 votes
如果条件仅仅是检查是否设置了变量,那么甚至还有一个更短的形式:
a=${VAR:-20}
如果设置为VAR,则将分配给a的值为VAR,否则将为其分配默认值20 - 这也可能是表达式的结果。
正如Alex在评论中指出的那样,这种方法在技术上被称为“参数扩展”。
nemesisfixx answered 2019-01-30T08:38:55Z
42 votes
if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi
其他答案中建议的""表达式有一个固有的错误:如果$b具有非零退出状态,则op2将自动成为结果; 错误也不会在-e模式中捕获。 因此,如果op1永远不会失败(例如,:,true,如果内置或变量赋值没有任何可能失败的操作(如除法和OS调用)),那么该表达式只能安全使用。
请注意""报价。 如果$b为空或具有空格,则第一对将阻止语法错误。 其他人会阻止将所有空格转换为单个空格。
ivan_pozdeev answered 2019-01-30T08:39:25Z
39 votes
(( a = b==5 ? c : d )) # string + numeric
dutCh answered 2019-01-30T08:39:41Z
27 votes
[ $b == 5 ] && { a=$c; true; } || a=$d
这将避免在||之后执行该部分 在&&和 和||失败。
Sir Athos answered 2019-01-30T08:40:03Z
10 votes
这是另一个选项,您只需要指定一次分配的变量,无论您的分配是字符串还是数字都无关紧要:
VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`
只是一个想法。:)
Jasonovich answered 2019-01-30T08:40:32Z
9 votes
let命令支持大多数基本运算符:
let a=b==5?c:d;
当然,这仅适用于分配变量; 它无法执行其他命令。
emu answered 2019-01-30T08:41:01Z
5 votes
(ping -c1 localhost&>/dev/null) && { echo "true"; } || { echo "false"; }
wibble answered 2019-01-30T08:41:16Z
5 votes
以下似乎适用于我的用例:
例子
$ 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"
Brad Parks answered 2019-01-30T08:41:53Z
3 votes
如果您想要类似的语法,可以使用它
a=$(( $((b==5)) ? c : d ))
PRIYESH PATEL answered 2019-01-30T08:42:15Z
2 votes
以下是一些选项:
1-如果在一行中使用if else,则可以。
if [[ "$2" == "raiz" ]] || [[ "$2" == '.' ]]; then pasta=''; else pasta="$2"; fi
2-写一个这样的函数:
# Once upon a time, there was an 'iif' function in MS VB ...
function iif(){
# Echoes $2 if 1,banana,true,etc and $3 if false,null,0,''
case $1 in ''|false|FALSE|null|NULL|0) echo $3;;*) echo $2;;esac
}
像这样使用内部脚本
result=`iif "$expr" 'yes' 'no'`
# or even interpolating:
result=`iif "$expr" "positive" "negative, because $1 is not true"`
3-灵感来自案例答案,更灵活,一线使用是:
case "$expr" in ''|false|FALSE|null|NULL|0) echo "no...$expr";;*) echo "yep $expr";;esac
# Expression can be something like:
expr=`expr "$var1" '>' "$var2"`
Sergio Abreu answered 2019-01-30T08:43:04Z
2 votes
我们可以在Shell Scripting中使用以下三种方式来实现三元运算符:
[ $numVar == numVal ] && resVar="Yop" || resVar="Nop"
Or
resVar=$([ $numVar == numVal ] && echo "Yop" || echo "Nop")
Or
(( numVar == numVal ? (resVar=1) : (resVar=0) ))
Sujay U N answered 2019-01-30T08:43:26Z
1 votes
在bash中还有一个非常类似于三元条件的语法:
a=$(( b == 5 ? 123 : 321 ))
不幸的是,它只适用于数字 - 据我所知。
Andre Dias answered 2019-01-30T08:43:55Z
linux shell 三元运算符,语法 - Bash中的三元运算符(?:)相关推荐
- linux shell 递增,如何在 Bash 中对变量递增或者递减
原标题:如何在 Bash 中对变量递增或者递减 编写 Bash脚本时最常见的算术运算之一是递增和递减变量.这通常在循环中用作计数器,但它也可以在脚本的其他地方出现. 递增和递减意味着分别从数值变量的值 ...
- linux shell转换时间格式,在bash中转换日期格式
慕哥9229398 #since this was yesterdaydate -dyesterday +%Y%m%d#more precise, and more recommendeddate - ...
- linux shell 三元运算符,关于语法:Bash中的三元运算符(?:)
有什么办法可以做这种事吗 int a = (b == 5) ? c : d; 使用BASH? @荷兰语的答案表明,bash确实有类似于"三元运算符"的东西,但是在bash中,这被称 ...
- linux shell 获取环境变量,bash shell中的环境变量
环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 P ...
- linux shell 常用基本语法
转自网络,真正来源不详.... 一. Linux基本命令 1.1. cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或 ...
- 【Linux Shell】你知道bash shell和dash shell的区别吗?
最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析:我按照bash shel ...
- Linux shell script 的语法汇总
2019独角兽企业重金招聘Python工程师标准>>> 条件判断式 if判断式 if [ 条件判断式1 ]:then执行动作 elif [ 条件判断式2 ]:then执行动作 els ...
- dash linux命令,Linux shell语言——dash和bash
1.定义函数 bash: function在bash中为关键字 dash: dash中没有function这个关键字 2.select var in list; do command; done ba ...
- instanceof运算符_Java 8中的instanceof运算符和访客模式替换
instanceof运算符 我有一个梦想,不再需要操作员和垂头丧气的instanceof ,却没有访客模式的笨拙和冗长. 所以我想出了以下DSL语法: Object msg = //...whenTy ...
最新文章
- Tiobe 发布2011年2月开发语言排名,C#和Python在2011年继续上升
- 学python有哪些书推荐-有哪些Python学习路线值得推荐?线路及书籍推荐都在这里...
- 关于流水帐表序列号生成时的并发操作问题
- elf section类型_在 498 行极小 OS 上跑标准 ELF 程序
- 【招聘(深圳)】迈瑞招.NET 开发Leader和PM
- 序列化 自定义名字_反序列化漏洞(Web漏洞及防御)
- 腾讯回应封杀区块链公号;红芯服务国企非因浏览器;苹果弃用高通芯片 | 极客头条...
- linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决
- [转载] 知乎日报接口
- C++ int与string互转换
- 实现链表翻转的两种方法
- 项目启动会注意事项-甲方
- 西门子 S7-200CN CPU 224CN EEPROM芯片
- 基于深度学习的SLAM综述:迈向空间机器智能时代
- 2017华为面试算法题小结
- HNUCM-2022年秋季学期《算法分析与设计》练习9
- 建设数据中心机房主要看这几点,否则被定为劣质机房!!!
- python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件
- NLP深入学习——过滤停用词(Filtering stop words)
- 2021年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程