O que o $ {3 #?} faz?

5

Eu tenho um script com a seguinte atribuição de variável:

TEST_VARIABLE=${3#?}

O que o ${3#?} faz?

    
por Stri6e5 28.05.2014 / 17:53

2 respostas

6

Isso é chamado de expansão de parâmetro:

  1. $3 é sua variável, que é o terceiro parâmetro do script / função.
  2. # removerá o prefixo mais curto da variável.
  3. ? é o padrão que você está procurando (neste caso, é qualquer caractere).

Então, basicamente, você remove o prefixo mais curto da variável chamada 3 até encontrar o padrão.

Em geral, podemos considerar:

${variable_name[option][pattern]}

Existem outras opções como:

  • ## remove o maior prefixo.
  • % remove o sufixo mais curto.
  • %% remove o maior sufixo.

Que você pode combinar com outros padrões, por exemplo, para obter o último campo de uma linha CSV:

> string="asdf,1234,aa,foo22"
> echo ${string##*,}
foo22

Observe como removemos o maior prefixo que procurava pelo padrão "qualquer caractere (s) seguido por uma vírgula".

    
por 29.05.2014 / 14:29
4
> set -- 1 2 foo
> echo "$3"
foo
TEST_VARIABLE=${3#?}
> echo "$TEST_VARIABLE"
oo

Atribui o valor do terceiro parâmetro posicional sem seu primeiro caractere à variável TEST_VARIABLE (o próprio parâmetro posicional não é alterado); usado em funções ou scripts de shell:

./myscript 1 2 foo
# or
myfunc 1 2 foo
  # within each $3 is foo

Para ter parâmetros posicionais em um shell interativo, você precisa de set .

    
por 28.05.2014 / 17:58