In un modo compatibile con posix che funziona con più implementazioni, come posso stampare l'elenco delle variabili d'ambiente attualmente definite senza i loro valori?
Su alcune implementazioni (mksh, freebsd / bin / sh), solo l'utilizzo exportda solo si adatta al conto:
$ export
FOO2
FOO
Ma per alcune altre implementazioni (bash, zsh, dash), exportmostra anche il valore. Con bash, ad esempio:
$ 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$
Altre opzioni come envo printenvnon hanno opzioni per stampare solo i nomi delle variabili senza valori, almeno non sulle piattaforme linux e freebsd che ho provato.
Piping su awk / sed / etc. o tagliare la lista con tecniche di espansione dei parametri (ad es. ${foo%%=*}) è accettabile, ma deve lavorare con valori che possono estendersi su linee e avere =e spazi bianchi nel valore (vedi esempio sopra).
Le risposte specifiche a particolari implementazioni della shell sono interessanti, ma sto principalmente cercando qualcosa che sia compatibile tra le implementazioni.
export -pper questo?
export -pperché questo ti darebbe un output coerente su tutte le shell POSIX, che hai detto che volevi.
export -pnon soddisfa il primo requisito: stampare solo nomi di variabili senza valori.
export -p. Non scriverò questo parsing, perché nel caso generale, dovrebbe anche fare un corretto parsing delle quotazioni, nel caso in cui tu abbia una variabile il cui valore è qualcosa del genere hello\nexport var=value. Uno dei pochi altri comandi che ti darà un output coerente in tutte le shell POSIX è env, ma quell'output è più difficile da analizzare poiché manca il export =bit.
export -pspecificato da POSIX per generare output adatto anche all'input nella shell.