D'une manière compatible posix qui fonctionne avec plusieurs implémentations, comment puis-je imprimer la liste des variables d'environnement actuellement définies sans leurs valeurs?
Sur certaines implémentations (mksh, freebsd / bin / sh), le simple fait d'utiliser export
seul suffira:
$ export
FOO2
FOO
Mais pour certaines autres implémentations (bash, zsh, dash), export
affiche également la valeur. Avec bash, par exemple:
$ 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$
D'autres options comme env
ou printenv
n'ont pas d'options pour imprimer uniquement les noms de variables sans valeurs, du moins pas sur les plates-formes Linux et FreeBSD que j'ai essayées.
Tuyauterie vers awk / sed / etc. ou rogner la liste avec des techniques d'expansion de paramètres (par exemple, ${foo%%=*}
) est acceptable, mais il doit fonctionner avec des valeurs qui peuvent s'étendre sur des lignes et avoir des =
espaces dans la valeur (voir l'exemple ci-dessus).
Les réponses spécifiques à des implémentations de shell particulières sont intéressantes, mais je recherche principalement quelque chose de compatible entre les implémentations.
export -p
pour cela?
export -p
parce que cela vous donnerait une sortie cohérente sur tous les shells POSIX, ce que vous avez dit vouloir.
export -p
ne correspond pas à la première exigence - imprimer uniquement les noms de variables sans valeurs.
export -p
. Je ne vais pas écrire cette analyse, car dans le cas général, il faudrait également effectuer une analyse des guillemets appropriée, au cas où vous auriez une variable dont la valeur ressemble à quelque chose hello\nexport var=value
. L'une des rares autres commandes qui vous donnera une sortie cohérente dans tous les shells POSIX est env
, mais cette sortie est plus difficile à analyser car elle manque le export =
bit.
export -p
spécifiée par POSIX pour générer une sortie qui convient également à l'entrée dans le shell.