Simples if/else não funciona

Simples if/else não funciona

Estou olhando isso há uma hora sem descobrir qual é o problema. A instrução else não está funcionando por algum motivo.

#!/bin/bash
if [ $#=3 ]
then
echo $*
else
echo "error" 1>&2
exit
fi

Responder1

O problema está na linha:

if [ $#=3 ]

Como não tem espaços ao redor =, necessariamente está fazendo:

if [ -n $#=3 ]

teste que sempre será verdadeiro como =3sempre está lá, portanto, elsenunca será acionado.

Você precisa usar espaços ao redor =:

if [ $# = 3 ]

Use também aspas duplas na expansão de variáveis ​​para evitar a divisão de palavras e a expansão do nome do caminho, o que não é estritamente necessário nesse caso $#.

informação relacionada