desmarque uma variável e use seu valor

1

Em um arquivo source d, desejo retornar o status de saída de um comando específico, que armazeno na variável return_val .

Como faço para desfazer essa variável (para não poluir o namespace), e ainda retornar seu valor?

    
por Tom Hale 15.07.2018 / 12:49

4 respostas

2

Se você estiver usando um shell que suporta variáveis locais, como ksh, bash ou zsh, coloque todo o código em funções e declare todas as variáveis como locais.

Com sh simples, você pode usar eval para executar a expansão de variável antes de usar o valor. Um status de retorno contém apenas dígitos, então você nem precisa de citações complicadas.

eval "unset return_status; return $return_status"
    
por 15.07.2018 / 19:10
0

Eu usei STDOUT para manter uma cópia do conteúdo da variável:

# Unset a variable and then use its value afterwards
echo $_return_val | { unset _return_val; return "$(cat)"; }
    
por 15.07.2018 / 12:49
0

Você poderia usar uma função com variáveis locais

return_exit () {
    local code=${!1}
    unset "$1"
    return "$code"
}

Em seguida, chame como:

return_exit _return_val
    
por 15.07.2018 / 13:11
-3

Como seu desejo e sua ideia de solução estão em conflito com partes não especificadas do padrão, recomendo usar uma variável intermediária para armazenar o valor.

Isso, é claro, só faz sentido caso você queira aplicar o método a mais de uma única variável. Você pode usar a variável $REPLY que é parte integrante de vários shells.

Note que não há concessão de que { cmd; } não crie um subshell, então mesmo chamar unset em tal construção pode não se aplicar ao shell principal.

Usando

echo "$_return_val" && unset _return_val

deve ser o que você gosta em todos os casos que tenho em mente.

    
por 15.07.2018 / 13:02

Tags