unset SOME_VARIABLE
remove SOME_VARIABLE
do ambiente. Isso é tudo que você precisa em quase todos os casos. No raro caso em que isso não é bom o suficiente, você não pode escapar de chamar um processo intermediário (mas pode ser outra instância de sh
).
Chamar export
e, em seguida, unset -v
não tem nenhuma vantagem. É inútil exportar a variável se você for desmarcá-la depois. As funções não são armazenadas no ambiente, portanto, unset -v
não afeta o que os subprocessos verão.
Alguns shells exportam funções pelo ambiente, mas o fazem codificando a definição da função como uma definição de variável. Se a variável tiver o mesmo nome que a função, unset FUNCTION_NAME
cuidará dela e, se não, então unset -v FUNCTION_NAME
não fará nada além do que unset FUNCTION_NAME
faz.
Um caso de borda em que você não pode desanunar uma variável é se ela foi declarada como somente leitura. Não há uma maneira portátil de transformar uma variável de somente leitura em normal. Para remover uma variável somente leitura do ambiente portável, você precisa invocar outra cópia do shell:
readonly foo=bar
export foo
sh -c 'unset foo; exec some-command'
Outro caso de borda são algumas variáveis que algumas conchas insistem em definir e evitar que sejam silenciadas. Para removê-los do ambiente, você precisa usar outro shell ou um utilitário como env
como ponto de partida.