if [ ! $COMMENT ]
Eu acho que você quis verificar se $COMMENT
não é vazio, mas não é isso que esse comando faz. Uma substituição de variável sem aspas sofre geração de nome de arquivo (globbing) e divisão de palavras. Aqui, você está digitando várias palavras em seu comentário ( sun mars venus
), portanto, o comando [
vê ! sun mars venus
(4 argumentos), que não é uma sintaxe válida. Sempre coloque aspas duplas em torno das substituições de variáveis:
if [ ! "$COMMENT" ]
Nesse caso específico, isso testa se $COMMENT
não está vazio. Este é um atalho porque existem apenas duas palavras dentro dos colchetes. No caso geral, a maneira de testar se uma cadeia é não vazia é usar o operador -n
e o operador -z
testa se a cadeia está vazia.
if [ -z "$COMMENT" ]
Em ksh / bash / zsh, você pode usar a construção [[ … ]]
em vez do comando [ … ]
. Os colchetes únicos são um comando comum vinculado às regras usuais de sintaxe do shell, enquanto os colchetes duplos são uma sintaxe especial do shell com suas próprias regras. Não há palavras divididas entre colchetes duplos, então você pode escrever
if [[ -z $COMMENT ]]
Aspas duplas não dariam dano.
O mesmo vale para if [ ! $1 ]
, que deve ser if [ -z "$1" ]
ou if [[ -z $1 ]]
.
Há uma estranheza adicional em exportar a variável COMMENT
para o ambiente quando o comentário é passado como um argumento para a função, mas não quando você a lê com o read
interno. A menos que você precise passar COMMENT
para um programa externo, elimine a palavra export
.