$ {parameter: = word} Atribuir valores padrão. Se o parâmetro estiver desativado ou nulo, a expansão da palavra será atribuída ao parâmetro. O valor do parâmetro é então substituído. Parâmetros posicionais e especiais não podem ser atribuídos dessa maneira.
Eu pensei que poderia usar esse recurso para escrever em ${LONG_VARIABLE_NAME:=hello}
vez de mais LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}
, mas agora o bash também tenta executar 'hello' e isso fornece um comando não encontrado. Alguma maneira de evitar isso? Ou terei que me ater a este último? Alguém pode dar um exemplo em que o padrão de atribuição é realmente útil?
Respostas:
Use dois pontos:
Os dois pontos são um comando nulo que não faz nada e ignora seus argumentos. Ele é incorporado ao bash para que um novo processo não seja criado.
fonte
: ${A:=hello}
é exatamente contanto queA=${A:-hello}
. Parece também que o último é um pouco menos esotérico e sua intenção é mais clara. O uso:
, que é basicamente um no-op, parece desajeitado em comparação com a maneira como o OP estava fazendo isso antes.:
abordagem seria preferível, tanto para digitação quanto para leitura. Sim, parece uma área em que o Bash poderia usar um pouco de melhoria.: ${VERY_LONG_VARIABLE_NAME:=hello}
vsVERY_LONG_VARIABLE_NAME=${VERY_LONG_VARIABLE_NAME:-hello}
. : . Eu espero que você usar nomes de variáveis descritivos em seu código :)VERY_LONG_VARIABLE_NAME=${VERY_LOGN_VARIABLE_NAME:-hello}
. OpaA=$A:-hello
abordagem é que ela é auto-documentada quando executadaset -x
. Ou seja, a atribuição será impressa como seA=hello
o comando nulo apenas imprimisse o valor (hello
).Consulte http://www.tldp.org/LDP/abs/html/parameter-substitution.html para exemplos
Se o parâmetro não estiver definido, use o padrão. Após a chamada, o parâmetro ainda não está definido.
Ambas as formas são quase equivalentes. O extra
:
faz diferença apenas quando o parâmetro foi declarado, mas é nulo.Se o parâmetro não estiver definido, defina o valor do parâmetro como padrão.
Ambas as formas quase equivalentes. O: faz diferença apenas quando o parâmetro foi declarado e é nulo
Se o parâmetro for definido, use alt_value, caso contrário, use cadeia nula. Após a chamada, o valor do parâmetro não foi alterado.
Ambas as formas quase equivalentes. O: faz diferença apenas quando o parâmetro foi declarado e é nulo
fonte
A expansão do parâmetro de valor padrão geralmente é útil em scripts de construção como o exemplo abaixo. Se o usuário apenas chamar o script como está, o perl não será incorporado. O usuário precisará definir explicitamente
WITH_PERL
um valor diferente de "não" para integrá-lo.Compilar sem Perl
Construa com Perl
fonte