Como variáveis dentro de chaves são avaliadas

4

Sou novo no shell de scripts e me deparei com essas expressões

${var:-val} e ${var-val}

${var:+val} e ${var+val}

${var:=val} e ${var=val}

então, como eles são avaliados e quais são as diferenças entre eles

Observação: se a pergunta do título for enganosa, corrija-a, por favor ... não tenho certeza de como essas expressões são chamadas para serem mais específicas ...

    
por WLION 29.05.2016 / 23:39

1 resposta

5

Todas essas formas de expansão de parâmetros são alternativas:

  • ${var:-val} é substituído por val se var não estiver definido ou nulo, ${var} caso contrário (então val é um "valor padrão");
  • ${var:=val} primeiro atribui val a var se var não estiver definido ou nulo e, em seguida, (em todos os casos) é substituído por ${var} ;
  • ${var:+val} é substituído por nada se var não estiver definido ou nulo, val caso contrário.

Omitir o : elimina a parte "ou nula" de todas essas definições.

Tudo isso está descrito na bash(1) manpage .

Alguns exemplos podem ajudar:

unset a
echo "${a:-default}"

produz default , assim como echo "${a-default}" .

a=
echo "${a:-default}"

novamente produz default , mas echo "${a-default}" produz uma linha em branco.

a=test
echo "${a:-default}"

produz test , assim como echo "${a-default}" .

unset a
echo "${a:=default}"

produz default e a é agora default (conforme confirmado por echo "${a}" ).

A forma + pode parecer estranha, mas é útil ao construir variáveis em várias etapas:

PATH="${PATH}${PATH:+:}/blah/bin"

adicionará : antes de /blah/bin apenas se PATH não estiver vazio, o que evita ter um caminho começando com : .

    
por 30.05.2016 / 11:26