«STR: commande introuvable» lors de l'attribution d'une valeur à une variable

9

J'ai entré les lignes suivantes dans un script shell appelé "test.sh":

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

Après chmod en exécutable, j'ai exécuté le script avec ./test.sh. Cependant, je reçois le message

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

Qu'est-ce que je fais mal?

Jay Silver
la source
1
La réponse de terdon a-t-elle résolu votre question? Sinon, il se peut que vous ayez accidentellement des espaces autour de votre affectation de variable.
Arronical
@Voker juste un commentaire stylistique basé sur ma suggestion : je pense qu'il est préférable d'utiliser Blockquote pour les messages d'erreur au lieu du bloc Code; à la fin, ce n'est pas du code mais du texte renvoyé par l'interpréteur Bash.
fedorqui
@fedorqui pourquoi? Citation des blocs ne préservent pas, ils interprètent des caractères spéciaux (par exemple *, _, #) comme démarquage, et sont rendus différemment par un logiciel de lecture d'écran. Je pense que tout ce qui est donné ou reçu par un ordinateur devrait être dans des blocs de code. Vous ne savez jamais quand le format exact peut être pertinent. Surtout lorsqu'il s'agit de choses comme celle-ci où l'unicode entre en jeu.
terdon
@terdon, cela dépend vraiment des cas et il y a même une demande d' ajout de format pour les journaux / avertissements / messages d'erreur qui permet le retour à la ligne et préserve les nouvelles lignes . Pour moi, s'il ne s'agit que d'une ligne comme celle-ci, je préfère les blocs de guillemets car cela permet de comprendre plus facilement ce qu'est le code et ce que sont les erreurs.
fedorqui
@fedorqui Je suppose que nous devrions le prendre en méta, mais je préfère toujours la police à largeur fixe et la reproduction au format exact chaque fois qu'un message est lu ou produit par un ordinateur.
terdon

Réponses:

20

Qu'utilisez-vous pour créer ce script? Les caractères de citation que vous avez dans votre question sont erronés. Ce ne sont pas des guillemets réguliers ( ") mais . Les citations régulières sont:

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

Alors que les vôtres sont:

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

Alors, utilisez simplement des guillemets réguliers et tout ira bien:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
terdon
la source
Merci pour la réponse Terdon. Les guillemets doubles dans le fichier sont corrects, la publication provient d'un e-mail.
Jay Silver
1
unipropsça a l'air cool. J'ai trouvé la page (est-ce notre propre tchrist?). Dois-je le télécharger depuis la source ou est-il disponible quelque part dans un gestionnaire de paquets? E: Unable to locate package uniprops
TRiG
1
Je n'utilise pas beaucoup Perl (à peine du tout). Je veux juste en savoir plus que le minimum sur Unicode.
TRiG
1
@TRiG bien, dans Ubuntu, c'est aussi simple que sudo apt-get install cpanminus; sudo cpanm Unicode::Tussleet puis vous avez la unipropscommande. Bien sûr, tchrist a écrit cette putain de chose donc vous pouvez aussi lui demander dans le chat :)
terdon
1
Je rencontre à regret ce genre de bêtises tout le temps. Un système wiki particulier chez mon employeur semble avoir la mauvaise habitude de traduire le trait d'union moins -U + 002D en trait d'union U + 2010 ( ou similaire ). Ensuite, des choses comme uname ‐aarrêter de travailler: - /. Les clients de messagerie ont souvent des habitudes néfastes similaires - en particulier lors de l'utilisation du formatage HTML - une autre bonne raison de préférer les e-mails en texte brut.
Digital Trauma