Expansión indirecta
Es conocida la funcionalidad de expansión de parámetros en bash, por ejemplo, si hacemos:
$ echo $XDG
y luego presionamos la tecla TAB, la shell mostrará las variables que comienzan con XDG:
$XDG_CONFIG_DIRS $XDG_SEAT $XDG_SESSION_PATH $XDG_CURRENT_DESKTOP $XDG_SEAT_PATH $XDG_SESSION_TYPE $XDG_DATA_DIRS $XDG_SESSION_CLASS $XDG_VTNR $XDG_MENU_PREFIX $XDG_SESSION_DESKTOP $XDG_RUNTIME_DIR $XDG_SESSION_ID
¿Pero tenemos una manera rápida para muestre todos los valores de esas variables? La respuesta es afirmativa:
$ for i in ${!XDG*}; do echo "$i es ${!i}"; done XDG_CONFIG_DIRS es /etc/xdg:/usr/share/kde-settings/kde-profile/default/xdg XDG_CURRENT_DESKTOP es KDE XDG_DATA_DIRS es /home/sergio/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop XDG_MENU_PREFIX es kf5- XDG_RUNTIME_DIR es /run/user/1000 XDG_SEAT es seat0 XDG_SEAT_PATH es /org/freedesktop/DisplayManager/Seat0 XDG_SESSION_CLASS es user XDG_SESSION_DESKTOP es KDE XDG_SESSION_ID es 2 XDG_SESSION_PATH es /org/freedesktop/DisplayManager/Session1 XDG_SESSION_TYPE es x11 XDG_VTNR es 1
Bash hace dos cosas distintas en ${!XDG]}
busca todas las variables que comienzan con XDG, mientras que ${!i}
hace una expansión indirecta, de alguna manera es como una variable que apunta a otra. Interesante, no ;) ?
Comentarios
Comments powered by Disqus