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