Analisando os forros mais complicados e tendo uma lista útil dos mais úteis

2

Já vi alguns forros como abaixo & demorou um pouco para analisar o uso exato & trabalhando nisso - algo como definir o valor para mais tarde se não estiver definido.

export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}

Eu não vi literais complicados como ': -' quando eu procuro por algo. Existe alguma lista útil de tais liners úteis documentados ou uma página de manual específica para referenciar?

    
por user1587504 25.09.2013 / 12:16

3 respostas

3

Leia man bash e digite /Parameter Expansion (exatamente assim, com a barra inicial). Ele procurará a seção relevante daquela página do manual; os modificadores de expansão possíveis são explicados lá.

    
por 25.09.2013 / 14:41
4

Além de outra boa resposta em relação à consulta da documentação, eu sempre recorro ao recurso de depuração do Bash para ver o que está acontecendo.

Você pode ativá-lo e desativá-lo, agrupando os comandos de interesse em um bloco como este:

$ set -x; command_to_watch; set +x

Exemplo

$ set -x; export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}; set +x
+ export JDK_HOME=/some/path/java-1.7
+ JDK_HOME=/some/path/java-1.7
+ set +x

Aqui você pode ver que a variável $JDK_HOME está sendo definida para /some/path/java-1.7 . No entanto, se formos configurá-lo para outra coisa:

$ export JDK_HOME=/a/path
$ echo $JDK_HOME
/a/path

E execute este comando novamente:

$ set -x; export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}; set +x
+ export JDK_HOME=/a/path
+ JDK_HOME=/a/path
+ set +x

Podemos ver que não fez nada, levando-nos ao fato de que, se a variável já estiver configurada, este comando a deixará sozinha, caso contrário, ela será definida com o valor /some/path/java-1.7 .

Confirmando nossa suspeita na página de manual do Bash :

${parameter:-word}
      Use Default Values.  If parameter is unset or null, the expansion of word
      is substituted.  Otherwise, the value of parameter is substituted.
    
por 25.09.2013 / 15:17
3

Encontrei os Cartões de referência no Apêndice B do Advanced Bash-Scripting Guide muito útil. A tabela relevante para o seu exemplo seria Tabela B-4: Substituição e Expansão de Parâmetro .

    
por 25.09.2013 / 12:24