Trabalho em um ambiente relativamente heterogêneo, onde posso estar executando versões diferentes do Bash em diferentes nós HPC, VMs ou minha estação de trabalho pessoal. Como eu coloquei meus scripts de login em um repositório Git, eu gostaria de usar o mesmo (ish) .bashrcem geral, sem muitos "se este host, então ..." - confusão do tipo.
I como o comportamento padrão do Bash ≤ 4.1 que se expande cd $SOMEPATHem cd /the/actual/pathquando pressionando a Tabtecla. No Bash 4.2 e acima, você precisaria shopt -s direxpandreativar esse comportamento, que não estava disponível até o 4.2.29 . Este é apenas um exemplo; outra shoptopção possivelmente relacionada complete_fullquote(embora eu não saiba exatamente o que faz) também pode ter mudado o comportamento padrão na v4.2.
No entanto, direxpandnão é reconhecido pelas versões anteriores do Bash e, se eu tentar shopt -s direxpandno meu .bashrc, isso resulta em uma mensagem de erro sendo impressa no console toda vez que eu faço logon em um nó com um Bash mais antigo:
-bash: shopt: direxpand: invalid shell option name
O que eu gostaria de fazer é agrupar uma condição condicional shop -s direxpandpara ativar essa opção no Bash> 4.1 de maneira robusta, sem atrapalhar as versões mais antigas do Bash ( ou seja , não apenas redirecionar a saída de erro para /dev/null).
.bashrc. Eu ainda queria um registro de como usar $BASH_VERSINFOpara interrogar a versão principal / secundária do shell em execução, para minha própria edificação, e é por isso que terminei de postar minha própria resposta. :)