Quando um valor padrão é fornecido para uma expansão de variável (por exemplo ${varname-default}
, ), como os caracteres que compõem default
devem ser interpretados?
Ingenuamente, eu teria adivinhado que a substituição de variável (por exemplo, $b) e a expansão de caracteres semelhantes a aspas '
, "
, \
ocorreriam neste contexto ... mas parece que a expansão de caracteres semelhantes a aspas nem sempre ocorre.
Por exemplo,
> echo x${a-''}y
xy
mas
> echo x"${a-''}"y
x''y
Eu esperava xy
nos dois casos, já que construções que expandem variáveis como ${a-$PATH}
e ( BRACE='}'; echo ${a-$BRACE} )
, funcionam bem.
No entanto GNU bash, version 4.4.19(1)-release
e ... a versão mais recente de mksh
ambos tem o mesmo comportamento onde ''
está incluído literalmente na saída para o segundo exemplo.
A
${parameter:-[word]}
expansão está sujeita a várias expansões:De man bash :
Da especificação POSIX :
Ambos relatam o mesmo e ambos não incluem "remoção de cotação".
As aspas são removidas após a expansão de toda a variável já ter sido feita. No entanto, é difícil mostrar exatamente como isso é feito:
Ou: