shell语法补充和理解

yuanheci 2024年06月21日 128次浏览

((…))对应的是expr

expr 是一个外部命令,用于执行表达式的计算,包括算术运算、字符串操作、比较等。expr 是一个多功能的工具,可以处理数字和字符串表达式。expr需要显示捕获标准输出值。
而((…))只适用于算数运算。


在 Bash 中,((…)) 是内置的算术扩展,用于执行算术运算。它不仅可以用于赋值和计算,还可以直接用于条件判断,而无需显式捕获值。
它支持 C 风格的算术运算和逻辑运算,有了它直接在bash中为所欲为!

直接使用 ((…)) 的好处
简洁:不需要显式捕获值,直接在条件判断中使用。
高效:((…)) 是 Bash 的内置功能,比调用外部命令(如 expr)更高效。
可读性:语法更加简洁和直观。

赋值和引用:当使用 ((…)) 进行算术运算并赋值给变量时,需要使用 $ 符号来引用变量的值。
条件判断:当使用 ((…)) 进行条件判断时,不需要使用 $ 符号,因为 ((…)) 的结果是一个退出状态码,直接用于判断条件的真假。

捕获标准输出stdout的值:
1、用``
2、用$(…)

花括号{}的作用是明确变量名的边界:
${a}和$a相同。

$((…)):这是命令替换和算术运算的组合,用于捕获算术运算的结果并赋值给变量。
在 $((…)) 中,变量名前的 $ 符号是必须的,因为这是引用变量值的标准方式。你不能去掉这些 $ 符号,否则 Bash 将无法正确解析变量名并会导致错误
使用 $((…)) 进行算术运算并赋值给变量,可以等价地使用 ((…)) 语法。两者都可以用于算术运算和赋值,但 ((…)) 语法更简洁,且不需要在变量名前加 $ 符号。
使用 $((…)),

vv=$(($vv + ${ccx_max_value[$pid_v]} - ${ccx_min_value[$pid_v]}))

使用 ((…))

((vv = vv + ccx_max_value[pid_v] - ccx_min_value[pid_v]))

总结:
$((…)) 和 ((…)) 都可以用于进行算术运算并赋值给变量。
$((…)) 需要在变量名前加 $ 符号,并且通常用于命令替换。
((…)) 不需要在变量名前加 $ 符号,语法更简洁,推荐用于直接的算术运算和赋值。
涉及到计算、数字赋值、if条件中数字相关的,全部用((…))。

if中字符串相关的,用[…]


定义数组: declare -a

定义hash:declare -A
且这里的hash的key可以既有字符串,也有数字。