Bash中能否使用三元运算符同时为多个变量赋值?
Bash 三元运算符同时为多个变量赋值的实现方法
可以实现,Bash 的算术上下文(即(( ... ))包裹的区域)内支持通过逗号运算符执行多个赋值操作,刚好匹配你需要的同时修改多个变量的需求。
实现代码
你可以直接把伪代码改成如下可运行的形式:
n=100 desired="" for i in {1..10} ; do current_val=$(numeric_command_output) (( current_val < n ? (n = current_val, desired = i) : 0 )) done
逻辑说明
- 逗号属于Bash算术运算符中的序列运算符,会按顺序执行前后的表达式,返回最后一个表达式的结果,因此你可以在三元运算符的真值分支里用逗号分隔多个赋值语句,一次性完成多个变量的修改
- 假值分支写任意无副作用的常量即可,不会修改原有变量值,符合你需要保持变量不变的要求
可选实现方案
如果更看重代码可读性,也可以直接用标准if判断实现,逻辑完全等价:
n=100 desired="" for i in {1..10} ; do current_val=$(numeric_command_output) if (( current_val < n )); then n=$current_val desired=$i fi done
注意事项
- 上述基于算术上下文的三元赋值方法仅支持赋值数值类型的变量,如果你需要给变量赋值非数值的字符串,只能用
if判断的写法实现 - 建议先把命令输出存到临时变量再做判断,避免重复执行命令带来的额外开销或者结果不一致的问题
内容的提问来源于stack exchange,提问作者puwlah
相关产品推荐
相关产品推荐

