Bashスクリプトには、入力パラメータを解析するための次の行があります。
((10#$2 > 0)) 2>/dev/null && shift 2 || shift
デフォルトでは、オプションの整数サブパラメーターを使用してパラメーターを処理するのに役立ちます。良い:
-x 100 -y
-x -y
どのように機能するかを説明できますか?
答え1
この行は、2番目の位置引数がより大きいことを確認します0
。条件が真の場合、位置パラメータ3、4、...を1、2、...に移動します。条件が偽の場合は、位置パラメータ2、3、...を1、2、...に移動します。 。 ..
前に0が付いた定数は8進数と解釈されます。10#$2
位置パラメータが$2
素数として解釈されるとします。参考にしてもいいと思います。シェル算術。
したがって、((10#$2 > 0))
10進数の2番目の位置引数が0より大きいことを確認します。 2>/dev/null
このテストによって発生したすべてのエラーはにリダイレクトされます/dev/null
。バラよりBash 算術式#
オペレーターに関する追加情報。
&&
||
条件付き構造です。したがって、条件がtrueの場合はshift 2
実行し、それ以外の場合はshift
実行します。
expression1 && expression2
式1と式2の両方が真であれば真です。
expression1 || expression2
式1または式2がtrueの場合はtrueです。
たとえば、次のことを考えてみましょう。
$ ((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 ))
算術式は次の規則に従って評価されます(シェル算術を参照)。式がゼロでないと評価された場合、戻り状態は0で、そうでない場合は戻り状態は1です。これはまったく同じです
let "expression"