Parece que você está tentando atribuir $PWD
a $outDir
apenas no caso de $outDir
não ser definido ou de valor nulo, sim?
O que se segue é equivalente, penso:
printf 'We are here: "%s"\n $outDir = "%s"\n' \
"$PWD" "${outDir:=$PWD}"
Se $outDir
já tiver um valor atribuído, para o segundo argumento de printf
, que imprime seu valor, senão ele atribui simultaneamente o valor de $PWD
a $outDir
e o imprime.
É claro que, embora a chamada ${outDir:=$PWD}
variable auto-corrija um valor nulo ou não definido, ele não tenta verificar se é um diretório . O mesmo acontece com o seu cheque acima. E provavelmente melhor do que qualquer um deles é:
cd -- "${outDir:=$PWD}" || exit; cd - >/dev/null
cd
não apenas verificará se a seleção do usuário para $outDir
está correta, mas também imprimirá um erro se não for ou não puder ser acessado pelo usuário. cd -
apenas o levará de volta para onde você estava antes de testar com cd
em primeiro lugar no caso de um teste bem-sucedido. O redirecionamento >/dev/null
é apenas para manter cd -
da impressão $PWD
, o que ele fará quando usado de outra forma.
Se o usuário não atribuiu $outDir
, no entanto, seu valor é atribuído apenas ao valor de $PWD
como antes, o que implica um teste bem-sucedido e dois cd $PWD
de comandos em sucessão, pois o -
é substituído por $OLDPWD
- que é aqui também $PWD
.