语法 - 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中的三元运算符(?:)相关推荐

  1. linux shell 递增,如何在 Bash 中对变量递增或者递减

    原标题:如何在 Bash 中对变量递增或者递减 编写 Bash脚本时最常见的算术运算之一是递增和递减变量.这通常在循环中用作计数器,但它也可以在脚本的其他地方出现. 递增和递减意味着分别从数值变量的值 ...

  2. linux shell转换时间格式,在bash中转换日期格式

    慕哥9229398 #since this was yesterdaydate -dyesterday +%Y%m%d#more precise, and more recommendeddate - ...

  3. linux shell 三元运算符,关于语法:Bash中的三元运算符(?:)

    有什么办法可以做这种事吗 int a = (b == 5) ? c : d; 使用BASH? @荷兰语的答案表明,bash确实有类似于"三元运算符"的东西,但是在bash中,这被称 ...

  4. linux shell 获取环境变量,bash shell中的环境变量

    环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 P ...

  5. linux shell 常用基本语法

    转自网络,真正来源不详.... 一. Linux基本命令 1.1.  cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或 ...

  6. 【Linux Shell】你知道bash shell和dash shell的区别吗?

    最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析:我按照bash shel ...

  7. Linux shell script 的语法汇总

    2019独角兽企业重金招聘Python工程师标准>>> 条件判断式 if判断式 if [ 条件判断式1 ]:then执行动作 elif [ 条件判断式2 ]:then执行动作 els ...

  8. dash linux命令,Linux shell语言——dash和bash

    1.定义函数 bash: function在bash中为关键字 dash: dash中没有function这个关键字 2.select var in list; do command; done ba ...

  9. instanceof运算符_Java 8中的instanceof运算符和访客模式替换

    instanceof运算符 我有一个梦想,不再需要操作员和垂头丧气的instanceof ,却没有访客模式的笨拙和冗长. 所以我想出了以下DSL语法: Object msg = //...whenTy ...

最新文章

  1. Tiobe 发布2011年2月开发语言排名,C#和Python在2011年继续上升
  2. 学python有哪些书推荐-有哪些Python学习路线值得推荐?线路及书籍推荐都在这里...
  3. 关于流水帐表序列号生成时的并发操作问题
  4. elf section类型_在 498 行极小 OS 上跑标准 ELF 程序
  5. 【招聘(深圳)】迈瑞招.NET 开发Leader和PM
  6. 序列化 自定义名字_反序列化漏洞(Web漏洞及防御)
  7. 腾讯回应封杀区块链公号;红芯服务国企非因浏览器;苹果弃用高通芯片 | 极客头条...
  8. linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决
  9. [转载] 知乎日报接口
  10. C++ int与string互转换
  11. 实现链表翻转的两种方法
  12. 项目启动会注意事项-甲方
  13. 西门子 S7-200CN CPU 224CN EEPROM芯片
  14. 基于深度学习的SLAM综述:迈向空间机器智能时代
  15. 2017华为面试算法题小结
  16. HNUCM-2022年秋季学期《算法分析与设计》练习9
  17. 建设数据中心机房主要看这几点,否则被定为劣质机房!!!
  18. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件
  19. NLP深入学习——过滤停用词(Filtering stop words)
  20. 2021年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程

热门文章

  1. 了解模型预测控制4--自适应,增益调度和非线性MPC
  2. springBoot 拦截器与过滤器
  3. 计算机课拔线头检讨书,实验室检讨书.doc
  4. 使用NNI进行自动超参数调优
  5. 什么是编程?该怎么学习编程?
  6. 图解HTTP(四)—— 返回结果的HTTP状态码
  7. 虚拟机客户端怎么连接服务器,虚拟机客户端连接服务器
  8. 三极管+电容 实现的心形灯电路
  9. Linux之常用命令
  10. dad my_经典绘本| My Dad