Vamos dividir isso em pedaços.
Este código executa o comando :
com alguns argumentos. O comando :
não faz nada e ignora seus argumentos. Portanto, toda a linha de comando não faz nada, exceto quaisquer efeitos colaterais que aconteçam nos argumentos.
A sintaxe ${parameter_name:=value}
existe em todos os shells no estilo Bourne não antigos, incluindo ash, bash, ksh e zsh. Define o parâmetro como padrão, se necessário. É equivalente a
if [ -z "$parameter_name" ]; then parameter_name=value; fi
… ${parameter_name}
Em outras palavras, se parameter_name
não estiver definido ou estiver definido como um valor vazio, defina-o como o valor indicado; e, em seguida, execute o comando, usando o novo valor de parâmetro. Existe uma variante, ${parameter_name=value}
, que deixa o parâmetro vazio se estiver vazio, usando apenas o valor indicado se o parâmetro não foi definido.
Você encontrará essa sintaxe documentada em "expansão de parâmetro" na especificação POSIX e os manuais dash, bash, ksh e zsh.
Existem variações nesta sintaxe, em particular ${parameter_name:-value}
, que permitem usar apenas um valor padrão para essa expansão, sem atribuir ao parâmetro.
Em resumo, : ${parameter_name:=value}
é uma maneira concisa de escrever
if [ -z "$parameter_name" ]; then parameter_name=value; fi