Inicialização da variável local do Bash

2

Como o Bash inicializa as variáveis locais? Os seguintes comandos sempre farão o mesmo (quando usados dentro de uma função)?

local foo
local foo=
local foo=""
    
por Cyker 28.08.2017 / 23:38

1 resposta

5

local foo="" e local foo= são exatamente equivalentes. Em ambos os casos, o lado direito do sinal de igual é uma string vazia.

local foo e local foo= são diferentes: local foo deixa foo não definido enquanto local foo= define foo como uma string vazia. Mais precisamente, local foo cria uma variável local e essa variável é inicialmente não definida. Uma atribuição subsequente foo=… define o valor local e essa atribuição pode ser combinada com a instrução local . Testemunha:

bash-4.3$ demo () {
  local unset empty=
  echo "unset=\"${unset-(not set)}\" empty=\"${empty-(not set)}\""
}
bash-4.3$ demo
unset="(not set)" empty=""

Este é o mesmo comportamento do ksh (exceto que em ksh você precisa usar a palavra-chave typeset em vez de local ). Por outro lado, em zsh, local foo define foo para uma string vazia.

    
por 29.08.2017 / 01:06