De uma maneira compatível com posix que funciona com várias implementações, como posso imprimir a lista de variáveis de ambiente definidas atualmente sem seus valores?
Em algumas implementações (mksh, freebsd / bin / sh), apenas o uso export
por si só caberá na conta:
$ export
FOO2
FOO
Mas para algumas outras implementações (bash, zsh, dash), export
também mostra o valor. Com o bash, por exemplo:
$ export
export FOO2='as df\
asdk=fja:\
asd=fa\
asdf'
export FOO='sjfkasjfd kjasdf:\
asdkj=fkajdsf:\
:askjfkajsf=asdfkj:\
safdkj'
$ printenv | sed -n l
FOO2=as\tdf\$
asdk=fja:\$
asd=fa\$
asdf$
FOO=sjfkasjfd kjasdf:\$
asdkj=fkajdsf:\$
\t:askjfkajsf=asdfkj:\$
safdkj$
Outras opções, como env
ou printenv
não, têm opções para imprimir apenas os nomes das variáveis sem valores, pelo menos não nas plataformas linux e freebsd que eu tentei.
Tubulação para awk / sed / etc. ou aparar a lista com técnicas de expansão de parâmetros (por exemplo, ${foo%%=*}
) é aceitável, mas precisa trabalhar com valores que podem abranger linhas e ter um =
espaço em branco no valor (veja o exemplo acima).
Respostas específicas para implementações específicas de shell são interessantes, mas estou procurando principalmente por algo que seja compatível entre implementações.
export -p
isso?
export -p
porque isso forneceria uma saída consistente em todos os shells POSIX, que você disse que queria.
export -p
não se encaixa no primeiro requisito - imprimir apenas nomes de variáveis sem valores.
export -p
. Não vou escrever essa análise, porque, no caso geral, também seria necessário fazer uma análise de cotação adequada, caso você tenha uma variável cujo valor seja algo parecido hello\nexport var=value
. Um dos poucos outros comandos que fornecerá uma saída consistente em todos os shells POSIX é env
, mas essa saída é mais difícil de analisar, pois falta um export =
pouco.
export -p
especificada pelo POSIX para gerar uma saída que também é adequada para entrada no shell.