As variáveis de ambiente não devem ter um nome vazio, então muitos utilitários não as suportam.
O comando env
do GNU coreutils suporta a configuração da variável de ambiente com um nome vazio, mas não a desabilitando. Isso é um bug.
$ env '=wibble' env |grep wibble
=wibble
$ env '=wibble' env -u '' env
env: cannot unset '': Invalid argument
Os shells comuns também não podem desarmar o nome vazio. Tudo bem, já que o nome vazio não deve ser usado como uma variável de ambiente e não pode ser usado como uma variável de shell. Zsh é o único buggy no lote: ele finge fazer o trabalho, mas na verdade não faz nada.
$ env '=wibble' dash -c 'unset ""'
dash: 1: unset: : bad variable name
$ env '=wibble' bash -c 'unset ""'
bash: line 0: unset: '': not a valid identifier
$ env '=wibble' ksh -c 'unset ""'
ksh[1]: unset: : invalid variable name
$ env '=wibble' mksh -c 'unset ""'
mksh: : is read only
$ env '=wibble' posh -c 'unset ""'
posh: unset: is read only
$ env '=wibble' zsh -c 'unset ""'
$ env '=wibble' zsh -c 'unset ""; env' | grep wibble
=wibble
Python, como você notou, corrige erros quando encontra o nome vazio de uma variável de ambiente .
Perl não tem esse problema, por isso pode ser uma solução para você. Observe que você precisa executar um novo shell para usar um processo externo para alterar o ambiente.
perl -e 'delete $ENV{""}; exec $ARGV[0] @ARGV' "$SHELL" "-$-"