De una manera compatible con posix que funciona con múltiples implementaciones, ¿cómo puedo imprimir la lista de variables de entorno definidas actualmente sin sus valores?
En algunas implementaciones (mksh, freebsd / bin / sh), solo usarlo export
por sí solo se ajustará a la factura:
$ export
FOO2
FOO
Pero para algunas otras implementaciones (bash, zsh, dash), export
también muestra el valor. Con bash, por ejemplo:
$ 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$
Otras opciones como env
o printenv
no tienen opciones para imprimir solo los nombres de las variables sin valores, al menos no en las plataformas Linux y Freebsd que he probado.
Tuberías a awk / sed / etc. o recortar la lista con técnicas de expansión de parámetros (por ejemplo, ${foo%%=*}
) es aceptable, pero tiene que funcionar con valores que pueden abarcar líneas y tener un =
espacio en blanco en el valor (ver el ejemplo anterior).
Las respuestas específicas a implementaciones de shell particulares son interesantes, pero principalmente estoy buscando algo que sea compatible entre implementaciones.
export -p
para esto?
export -p
porque eso le daría una salida consistente en todos los shells POSIX, que dijo que quería.
export -p
no se ajusta al primer requisito: imprimir solo nombres de variables sin valores.
export -p
. No voy a escribir ese análisis, porque en el caso general, también tendría que hacer un análisis de comillas apropiado, en caso de que tenga una variable cuyo valor sea similar hello\nexport var=value
. Uno de los pocos otros comandos que le dará una salida consistente en todos los shells POSIX es env
, pero esa salida es más difícil de analizar ya que carece del export =
bit.
export -p
especificada por POSIX para generar una salida que también sea adecuada para la entrada en el shell.