cómo eliminar las funciones que se muestran con el command set?

Cuando el command set se usa sin ninguna opción, muestra los nombres y valores de todas las variables y funciones del shell.

Sin embargo, si queremos mostrar solo las variables y evitar las funciones de la salida, ¿puede alguien guiarme por el path?

Como ya indiqué en un comentario, env no se ajusta al requisito, ya que solo muestra las variables exportadas.

Procesar la salida del set para filtrar todo lo que no se parece a una definición variable es un truco no confiable. En particular, perderá una parte de las variables cuyo valor contiene un salto de línea. Lo que es peor, una function cuidadosamente escrita puede hacer que aparezcan definiciones de variables falsas.

La solución más simple es cambiar temporalmente al modo POSIX donde las funciones no se consideran (tipo de) variables:

 set -o posix set set +o posix 

Sin embargo, existe un problema si su modo pnetworkingeterminado ya es POSIX, o si desea que ese command funcione en cualquier modo POSIX en el que esté configurado el shell.

En tal caso, aquí hay una solución alternativa:

 (set -o posix;set) 

Esto solo configura el modo POSIX para el set commands integrado ejecutado en una subshell y el modo de shell principal no se ve afectado.

Si bien la solución más simple es usar env lugar de set , env no da todas las variables existentes, sino solo las que se pasarían a cualquier process iniciado con env (por lo que no hay variables no exportadas, por ejemplo). Otro enfoque es search el resultado del set para las líneas que tienen una cadena de espacio no blanco, an = y luego otra cadena de caracteres que no son de espacio en blanco:

 set | grep -E '^\S+=\S' 

Sin embargo, esto perderá cualquier variable establecida en un valor de línea múltiple (como IFS cuyo valor pnetworkingeterminado incluye un \n ).

No estoy seguro, pero la vaca consideraría algo.

  _____ ( env ) ----- o ^__^ o (oo)\_______ (__)\ )\/\ ||----w | || || 

En otras palabras, simplemente usa env lugar.


Supongo que solo leyó el comentario de Jilliagre.

  ________________________________ / But it will only show exported \ \ variables! / -------------------------------- \ ^__^ \ (!!)\_______ (__)\ )\/\ !! ||----w | || || 

Por algún motivo extraño, declare -p parece enumerar solo variables:

 $ declare -p declare -x ANT_HOME="/usr/share/apache-ant" declare -- BASH="/usr/bin/bash" declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath" declare -ir BASHPID declare -A BASH_ALIASES=() declare -a BASH_ARGC=() declare -a BASH_ARGV=() declare -A BASH_CMDS=() ... 

Por supuesto, esto tiene la desventaja de que las salidas declare commands que pueden recrear la variable con todos sus attributes. Dependiendo de lo que pretendas hacer con la salida, eso podría ser realmente útil.