解码 bash 脚本

解码 bash 脚本

bash 脚本中有以下行,解析输入参数:

((10#$2 > 0)) 2>/dev/null && shift 2 || shift

基本上它有助于处理带有可选整数子参数的参数。喜欢:

-x 100 -y

-x -y

你能解释一下它是如何工作的吗?

答案1

该行检查第二个位置参数是否大于0。如果条件为真,则将位置参数 3, 4, ... 移动到 1, 2, ... 如果条件为假,则将位置参数 2, 3, ... 移动到 1, 2, ...。 ..

带有前导零的常量被解释为八进制数。说10#$2导致位置参数$2被解释为小数。您可能还想参考壳算术

因此,((10#$2 > 0))检查以 10 为基数表示的第二个位置参数是否大于 0。 2>/dev/null导致此测试产生的任何错误都被重定向到/dev/null。看Bash 算术表达式有关#运营商的更多信息。

&&||是条件结构。因此,如果条件为真,shift 2则执行,否则shift执行。

expression1 && expression2

如果表达式 1 和表达式 2 都为真,则为真。

expression1 || expression2

如果表达式 1 或表达式 2 为真,则为真。

作为示例,请参考以下内容:

$ ((10>42)) && echo greater || echo smaller    # Condition is false so the `echo smaller` expression is evaluated
smaller
$ ((100>42)) && echo greater || echo smaller   # Condition is true so the `echo greater` expression is evaluated
greater

引用自手动的:

((...))

(( expression ))

算术表达式根据下述规则进行计算(请参阅 Shell 算术)。如果表达式的值非零,则返回状态为0;否则返回状态为 1。这完全等同于

let "expression"

相关内容