É mais simplificado;
você pode fazer algo em um comando simples em vez de dois
(por exemplo, [[-z $var]] && var=/temp
) ou um comando complexo como
if [[-z $var ]]
then
var=/temp
fi
Além disso, não exige que o valor condicional ser atribuído a uma variável. Por exemplo,
#!/bin/sh
prog="$1"
# Do sanity checks & input validation here.
cc "$prog" -o "${2:-$(basename "$prog")}"
Se isso for chamado como comp foo.c
,
ele irá compilar foo.c
e escrever a saída compilada em foo
.
Mas comp foo.c fu
irá compilar foo.c
e escreva a saída compilada em fu
.
Isso se torna especialmente significativo se você quiser usar vários parâmetros com valores padrão:
some_command ${1:-default_value1} ${2:-default_value2} ${3:-default_value3} ${4:-default_value4} ${5:-default_value5} ${6:-default_value6} ${7:-default_value7} ${8:-default_value8} ${9:-default_value9}
Fazer isso de outra maneira exigiria cerca de 18 comandos para configurar os parâmetros.
Outro exemplo de como usar isso onde você não precisa atribuir o valor condicional a uma variável é um script que deseja permitir que o usuário edite um arquivo:
#!/bin/sh ⋮ file=something ⋮ "$(EDITOR:-vi}" "$file"
que chama o editor favorito do usuário
(conforme especificado através da variável de ambiente EDITOR
),
ou vi
se o usuário não tiver especificado um.