在 bash 脚本中有以下行,解析输入参数:
((10#$2 > 0)) 2>/dev/null && shift 2 || shift
Run Code Online (Sandbox Code Playgroud)
基本上它有助于处理带有可选整数子参数的参数。喜欢:
-x 100 -y
-x -y
Run Code Online (Sandbox Code Playgroud)
你能解释一下它是如何工作的。
该行检查第二个位置参数是否大于0。如果条件为真,则将位置参数 3, 4, ... 移至 1, 2, ... 如果条件为假,则将位置参数 2, 3, ... 移至 1, 2, ...。 ..
带前导零的常量被解释为八进制数。Saying10#$2导致位置参数$2被解释为小数。您可能还想参考Shell Arithmetic。
因此,((10#$2 > 0))检查以 10 为基数表示的第二个位置参数是否大于 0。 2>/dev/null导致此测试导致的任何错误被重定向到/dev/null。有关运算#符的更多信息,请参阅Bash 算术表达式。
&&和||是条件结构。因此,如果条件为真,则shift 2执行 elseshift执行。
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
Run Code Online (Sandbox Code Playgroud)
引用手册:
((...))Run Code Online (Sandbox Code Playgroud)(( expression ))算术表达式根据下面描述的规则进行计算(参见 Shell 算术)。如果表达式的值非零,则返回状态为 0;否则返回状态为 1。这完全等同于
Run Code Online (Sandbox Code Playgroud)let "expression"
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |