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 exportseul suffira:
$ export
FOO2
FOO
Mais pour certaines autres implémentations (bash, zsh, dash), exportaffiche é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 envou printenvn'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 -ppour cela?
export -pparce que cela vous donnerait une sortie cohérente sur tous les shells POSIX, ce que vous avez dit vouloir.
export -pne 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 -pspécifiée par POSIX pour générer une sortie qui convient également à l'entrée dans le shell.