Bashスクリプトのデコード

Bashスクリプトのデコード

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"

関連情報