"STR: Comando no encontrado" al asignar un valor a una variable

9

Ingresé las siguientes líneas en un script de shell llamado "test.sh":

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

Después de chmod al ejecutable, ejecuté el script con ./test.sh. Sin embargo, recibo el mensaje

./test.sh: line 3  STR: Command not found

¿Qué estoy haciendo mal?

Jay Silver
fuente
1
¿La respuesta de Terdon resolvió tu pregunta? Si no, podría ser que accidentalmente tenga espacios alrededor de su asignación variable.
Arronical
@Voker es solo un comentario estilístico basado en mi sugerencia : creo que es mejor usar Blockquote para mensajes de error en lugar de Bloqueo de código; al final, esto no es código sino texto que el intérprete de Bash está devolviendo.
fedorqui
@fedorqui ¿por qué? Los bloques de comillas no conservan el formato, interpretan caracteres especiales (p *. Ej . _, #) Como rebajas, y el software del lector de pantalla los representa de manera diferente. Creo que cualquier cosa que sea entregada o recibida por una computadora debe estar en bloques de código. Nunca se sabe cuándo el formato exacto puede ser relevante. Especialmente cuando se trata de cosas como esta donde entra en juego unicode.
terdon
@terdon realmente depende de los casos e incluso hay una solicitud para agregar formato para registros / advertencias / mensajes de error que permite el ajuste de palabras y preserva las nuevas líneas . Para mí, si se trata solo de una línea como esta, prefiero los bloques de comillas, ya que facilita la comprensión del código y de los errores.
fedorqui
@fedorqui Creo que deberíamos llevarlo a meta pero siempre prefiero la fuente de ancho fijo y la reproducción de formato exacto cada vez que publico un mensaje que es leído o producido por una computadora.
terdon

Respuestas:

20

¿Qué estás usando para crear ese script? Los caracteres de comillas que tiene en su pregunta están equivocados. No son comillas dobles regulares ( ") pero . Las citas regulares son:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

Mientras que los tuyos son:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

Entonces, solo use comillas regulares y estará bien:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
terdon
fuente
Gracias por la respuesta Terdon. Las comillas dobles en el archivo son correctas. La publicación fue de un correo electrónico.
Jay Silver
1
unipropsse ve bien. Encontré la página (¿es ese nuestro propio tchrist?). ¿Tengo que descargarlo de la fuente o está disponible en un administrador de paquetes en alguna parte? E: Unable to locate package uniprops
TRiG
1
No uso mucho Perl (apenas). Solo quiero saber más que el mínimo sobre Unicode.
TRiG
1
@TRiG bueno, en Ubuntu, es tan simple como sudo apt-get install cpanminus; sudo cpanm Unicode::Tussley luego tienes el unipropscomando. Por supuesto, tchrist escribió la maldita cosa, así que también puedes preguntarle en el chat :)
terdon
1
Lamento encontrarme con este tipo de tonterías todo el tiempo. Un sistema wiki particular de mi empleador parece tener el desagradable hábito de traducir -guiones menos U + 002D en guiones U + 2010 ( o similar ). Entonces cosas como uname ‐adejar de funcionar: - /. Los clientes de correo electrónico a menudo tienen hábitos nefastos similares, especialmente cuando usan formato HTML, otra buena razón para preferir correos electrónicos de texto sin formato.
Trauma digital