Script bash de decodificação

3

Tenha a seguinte linha no script bash, analisando os argumentos de entrada:

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

Basicamente, ajuda a manipular parâmetros com um subparâmetro inteiro opcional. Como:

-x 100 -y

-x -y

Você poderia explicar como funciona?

    
por user1065145 21.03.2014 / 14:21

1 resposta

6

A linha verifica se o segundo parâmetro posicional é maior que 0 . Se a condição é verdadeira, então ela desloca os parâmetros posicionais 3, 4, ... para 1, 2, ... Se a condição é falsa, então ela desloca os parâmetros posicionais 2, 3, ... para 1, 2,. ..

Constantes com zero à esquerda são interpretadas como números octal. Dizer 10#$2 faz com que o parâmetro posicional $2 seja interpretado como um decimal. Você também pode consultar a Aritmética da Shell .

Como tal, ((10#$2 > 0)) verifica se o segundo parâmetro posicional representado na base 10 é maior que 0. 2>/dev/null faz com que quaisquer erros resultantes desse teste sejam redirecionados para /dev/null . Veja Expressões Aritméticas Bash para mais informações sobre o operador # .

&& e || são construções condicionais. Então, se a condição for verdadeira, então shift 2 é executado senão shift é executado.

expression1 && expression2

True if both expression1 and expression2 are true.

expression1 || expression2

True if either expression1 or expression2 is true.

Como exemplo, consulte o seguinte:

$ ((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

Citações do manual :

((...))

(( expression ))

The arithmetic expression is evaluated according to the rules described below (see Shell Arithmetic). If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to

let "expression"
    
por 21.03.2014 / 14:31