{ unset x
echo ${x+"you won't see this"}
x=
echo ${x+"this you'll see"} ${x:+"and this you won't"}
x=1
echo ${x+"now you'll"} ${x:+"see it all"}
}
this you'll see
now you'll see it all
Praticamente todas as expansões de parâmetro POSIX básicas se comportam de maneira diferente quando o parâmetro expandido é indefinido ou nulo dependendo do modificador de dois pontos opcional :
.
A forma +
de expansão de parâmetro expande para word
quando o parâmetro é definido, independentemente do seu conteúdo na expansão:
${parameter+word}
No entanto, ele não é expandido para word
quando $parameter
é definido , mas é nulo no seguinte:
${parameter:+word}
Existem também os formulários de expansão para -
, =
e ?
. O -
expandirá para word
quando $parameter
for não definido , ou, com :
, quando não estiver definido ou será nulo. O =
expandirá identicamente como -
, exceto que também definirá o valor nulo ou não definido do $parameter
como word
. E ?
mata um shell ao gravar uma mensagem de erro opcional word
para stderr quando $parameter
não está definido ou, com :
, do valor nulo. Para qualquer um desses três, se o $parameter
for definido e, com :
, não for nulo, o $parameter
será expandido para seu valor da mesma forma que seria de outra forma.