{ 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.