2011-05-12 21 views
7

Cuando entro echo ${!BASH*} en mi concha, consigo toda env vars cuyo nombre comience con la cadena "BASH":BASH (indirecta) de expansión

página del manual
BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION 

la fiesta es bastante discreto acerca de esta característica llamado shell parameter (indirect) expansion. Esta información (la sintaxis de este modo globbing particular) debe estar en algún lugar, pero no puedo encontrarlo.

  1. ¿Puedo hacer coincidir una cadena al final del nombre de la variable?

    Pero sobre todo

  2. ¿Puedo coincidir con una cadena en cualquier parte del nombre de la variable?

    Ah, y lo que sería delicioso

  3. se puede hacer coincidir nada (*) en cualquier parte del nombre de la variable? (Básicamente una lista de cualquier variable dentro de un bucle, y por cierto esto exactamente lo que estoy tratando de hacer)

Respuesta

6

Por lo que yo sé no hay manera de hacer la expansión incorporado nombre indirecta a juego al final del nombre .

Aquí es un comando con el que puede hacer lo que quiera:

$ compgen -v | grep -E "HOME$" 

Esto coincidirá con todas las variables cuyo nombre termina en HOME.

Al variar la parte grep puede hacer coincidir cualquier parte del nombre de la variable.

compgen es un bash incorporado para ser utilizado en scripts de finalización. compgen -v listará todos los nombres de variables. compgen -v BASH mostrará las mismas variables como echo ${!BASH*}, pero una por línea.

Cuestiones relacionadas