[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Pregunta tonta de Bash [SOLUCIONADO]



El Miércoles, 8 de Noviembre de 2006 23:59, César Rincón escribió:
> Iñaki wrote:
> > PD: Mi problema es que me estoy mal acostumbrando con la maravillosa
> > programación en Ruby, y hacer un "if" en Bash me empieza a resultar un
> > infierno  ;)
>
> Je.  Ruby es la berraquera, en efecto... ¿qué les costaba ponerle un
> "unless" a Bash? :)
>
> Pero Bash no es tan malo... y de hecho es bastante consistente.  Creo
> que parte del problema es que estás ignorando un detalle importante:
> esos corchetes '[', ']' que pones alrededor de la "condición", realmente
> no son parte de la sintaxis de if.
>
> El '[' es de hecho un comando.  Es un sinónimo para el comando "test";
> ve su manual: test(1).  El ']' final es ignorado; se te deja usarlo para
> que la condición no se vea fea.
>
> Cuando escribes
>
>    if [ false ] ; then echo "verdadero"; fi
>
> le estás pidiendo a 'if' que evalúe el comando 'test false', y ejecute
> las instrucciones tras el 'then' si 'test false' devuelve cero.
>
> Y la consola responde con "verdadero".  Eso es porque la evaluación de
>
>   test false
>
> es verdadera (e.g. devuelve 0), lo mismo que test true, test x, test 0,
> etc.:
>
>   if [ true ] ; then echo "cierto"; fi
>   --> cierto
>   if [ false ] ; then echo "cierto"; fi
>   --> cierto
>
> test no intenta ejecutar sus parámetros; asume que son cadenas.  Llamar
> a test con un parámetro produce verdadero siempre que el parámetro no
> sea la cadena vacía (ve test(1))
>
> 'if' ejecuta lo que pongas en el then si la "lista" que le das a
> ejecutar como condición devuelve 0 (ve en el manual bash(1) la
> definición de una "lista": es muy esclarecedora).
>
> Lo que pides, pues, se puede poner como
>
>   if ! which top >/dev/null ; then
>     echo "no hay top!"
>     exit 1
>   fi
>
> Nota la ausencia de '['.  Nota también el espacio entre el '!' y
> 'which', que es importante.
>
> O claro, se puede hacer también de todas las maneras que la gente ha
> sugerido :-)


Impresionante explicación. Esta va directa a mi disco duro ;)

Pues no, no tenía ni idea del significado de [ en bash, pensaba que era parte 
de la sintaxis (obligatoriamente).

Mil gracias de nuevo por la perfecta explicación. Saludos.






-- 
Iñaki

Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista



Reply to: