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"