Bash operador unario esperado

Resuelto
bash -  
mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   -
Hola,

Soy principiante en bash y estoy tratando de hacer un script muy simple que solo se detenga cuando el usuario diga sí.

#!/bin/bash until [ $var = 'sí' ] do read -p 'di sí : ' var done


Me da el error:
línea 3 : [: = : operador unario esperado
.

Sé que es sencillo, pero he buscado y no he encontrado, si alguien pudiera explicarme, gracias.

1 respuesta

  1. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 943
     
    Hola

    Explicación del problema

    En tu ejemplo,
    var
    no está inicializada,
    $var
    se sustituye por "nada", lo que da la prueba:

    until [ = 'sí' ] do ... done


    De ahí el error:
    =
    es un operador binario (un operando izquierdo, un operando derecho) y por tanto bash te dice que a la riguroso puede tomar un operador unario (por ejemplo
    !
    )... pero no binario.

    Cómo resolver tu problema

    Hay que:
    - o bien que compruebes previamente si
    var
    es una cadena no vacía (prueba
    -z
    )
    - o bien (lo que te recomiendo) poner
    $var
    entre comillas cada vez que lo evalúes en una prueba.

    Personalmente, yo prefiero la segunda solución. De manera general, una cadena de caracteres en bash puede contener espacios, y te encontrarás con el mismo tipo de problema si no tomas esta precaución.

     #!/bin/bash until [ "$var" = 'sí' ] do read -p 'di sí: ' var done exit 0


    Prueba:

    (mando@aldur) (~) $ sh toto.sh 
    di sí:
    di sí: no
    di sí: sí sí
    di sí: sí


    Buena suerte
    7
    1. bash
       
      ¡Muchas gracias por tomarte el tiempo de responderme, mamiemando! ¡Mi script funciona y ahora he entendido, gracias!
      1
    2. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 943
       
      ¡De nada :-) ¡Que sigas bien!
      1