': no ​​es un identificador válido para lectura

': no ​​es un identificador válido para lectura

Yo uso Notepad++ y escribo:

    read s
    echo "$s"

La salida es:

<code>': no ​​es un identificador válido</code>

Y luego intento poner punto y coma:

read s;
echo "$s"

y la salida es:

ingrese la descripción de la imagen aquí

Guardo el archivo como q.shy lo ejecuto con cygwin pero aún no puedo usar readel operador, así que me confundo. He probado con otros editores similares vipero el resultado es el mismo.

¿Lo que está mal? ¿Cómo hacer que funcione?

Respuesta1

El archivo de texto que constituye el script de shell fue escrito en Notepad++. Este editor guarda archivos como archivos de texto DOS de forma predeterminada que, desde el punto de vista de Unix, tiene un retorno de carro superfluo ( \r) al final de cada línea. Esto confunde sh.

Para eliminarlo:

$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh

La secuencia de comandoshaceCarece de una #!línea (como se señala en los comentarios), pero siempre que lo ejecute con un intérprete explícito ( sh q.sh), esto no es necesario.

Añadiendo la línea

#!/bin/sh

(después chmod +x q.sh) haría que ejecutarlo se ./q.shcomportara exactamente igual que ejecutarlo con sh q.sh.

Respuesta2

Otra forma de convertir el retorno de carro para Unix, si tienes acceso a Notepad++. En el Bloc de notas, continúe: Editar -> Conversión EOL -> Unix (LF)

En francés, es: Edición -> Convertir les sauts de ligne -> Converti au format Unix (LF)

Puede ser más rápido.

información relacionada