Eu me deparei com este pedaço de código daqui :
#!/bin/bash
# ...
if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
echo "Usage..."
exit
fi
Entendo que isso imprime as informações de uso quando qualquer argumento como -h
, --help
, -help
, -------help
é passado.
Mas por que "${1-}"
e não apenas "${1}"
? O que o hífen faz?
A princípio pensei que poderia significar qualquer argumento da posição 1 em diante. Eu tentei e não, não era isso.
Então pensei que poderia ser um erro de digitação e o autor pretendia "${1-9}"
permitir todas as posições numéricas. Novamente, não funcionou, nem é um código válido.
Um hífen em uma expansão de parâmetro permite que um valor padrão seja especificado . So
${1-}
significa “o valor do primeiro parâmetro se estiver definido e a string vazia caso contrário”.Isso não parece particularmente útil como está, porque uma variável não definida se expande para a string vazia de qualquer maneira. No entanto,
${1}
causará um erro seset -u
estiver ativado e nenhum parâmetro for fornecido, enquanto${1-}
não - portanto, alguns programadores de shell sempre usam este formulário ao se referir a variáveis que podem ser legitimamente desdefinidas.No contexto do site em que você encontrou isso, isso se encaixa na “coisa” número 5: