A expansão do bash pode ser executada entre aspas

3

Em uma tentativa de secar meu bashrc , tentei alterar isso,

CDPATH=".:~/Development:~/Development/resources:~"

para isso,

CDPATH=".:~/Development{,/resources}:~"

Mas eu achei que a expansão da chave não foi executada dentro da string citada. Existe uma maneira de conseguir isso?

    
por ivan 27.05.2015 / 17:37

1 resposta

3

Sim, na verdade existe:

set . ~/Development{,/resources} ~
IFS=:; CDPATH="$*"

O parâmetro "$*" special substitui o primeiro caractere em $IFS entre cada um dos parâmetros posicionais. Portanto, se você set e expandir os argumentos que deseja como argumentos separados, poderá preencher rapidamente os delimitadores apropriados conforme necessário na atribuição.

Se, como foi sugerido, você pode usar alguns ponteiros sobre como salvar / restaurar o valor de $IFS , você pode fazer o seguinte:

CDPATH=$IFS
set . ~/Development{,/resources} ~
IFS=:${IFS+;IFS=\$CDPATH}
eval 'set "$*"; unset IFS'"
      $IFS;    CDPATH=\"

Às vezes um pouco de malabarismo vale a pena para manter o ambiente limpo - e quando um parâmetro afeta o ambiente, esteja ele configurado ou não - e de maneiras diferentes dependendo - provavelmente é melhor tomar cuidado.

Ainda assim - tais precauções só são realmente necessárias em um ambiente no qual você pode garantir nenhum controle duradouro - em outras palavras, você não precisa fazer isso em seus próprios arquivos rc. Em um contexto como esse, você está praticamente garantido o controle permanente - e assim você pode (e deve ) definir os parâmetros especiais do shell de acordo com você.

    
por 27.05.2015 / 19:11