Trabajo en un entorno relativamente heterogéneo donde puedo ejecutar diferentes versiones de Bash en diferentes nodos HPC, máquinas virtuales o mi estación de trabajo personal. Debido a que puse mis scripts de inicio de sesión en un repositorio de Git, me gustaría usar el mismo (ish) en .bashrctodos los ámbitos, sin un montón de "si este host, entonces ..." - escribe desorden.
Yo al igual que el comportamiento predeterminado de Bash ≤ 4.1 que se expande cd $SOMEPATHen cd /the/actual/pathal pulsar la Tabtecla. En Bash 4.2 y superior, necesitaría shopt -s direxpandvolver a habilitar este comportamiento, y eso no estuvo disponible hasta 4.2.29 . Sin embargo, este es solo un ejemplo; Otra shoptopción , posiblemente relacionada , complete_fullquote(aunque no sé exactamente qué hace) también puede haber cambiado el comportamiento predeterminado en v4.2.
Sin embargo, direxpandlas versiones anteriores de Bash no lo reconocen, y si lo intento shopt -s direxpanden mi .bashrc, eso genera un mensaje de error que se imprime en la consola cada vez que inicio sesión en un nodo con un Bash anterior:
-bash: shopt: direxpand: invalid shell option name
Lo que me gustaría hacer es envolver un condicional shop -s direxpandpara habilitar esa opción en Bash> 4.1 de una manera robusta, sin irritar las versiones anteriores de Bash ( es decir , no solo redirigiendo la salida del error /dev/null).
.bashrc. Todavía quería un registro de cómo usar $BASH_VERSINFOpara interrogar la versión mayor / menor del shell en ejecución, para mi propia edificación, razón por la cual terminé de publicar mi propia respuesta. :)