Simple si/de lo contrario no funciona

Simple si/de lo contrario no funciona

Llevo una hora mirando esto sin saber cuál es el problema. La declaración else no funciona por alguna razón.

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

Respuesta1

El problema está en la línea:

if [ $#=3 ]

Como no tienes espacios alrededor =, necesariamente se hace:

if [ -n $#=3 ]

prueba que siempre será verdadera, ya que =3siempre está ahí, por lo tanto, elsenunca se activará.

Necesitas usar espacios alrededor =:

if [ $# = 3 ]

Utilice también comillas dobles en la expansión de variables para evitar la división de palabras y la expansión de nombres de rutas, aunque no es estrictamente necesario en este caso $#.

información relacionada