Vous devriez faire une od -xcb
sur ce script. Mon estimation est que ça va certainement avoir le mauvais caractère de fin de ligne dedans.
La raison pour laquelle je suggère cela est parce que la ligne:
': not a valid identifierad: `var_name
ressemble étrangement les deux lignes:
.........................ad: `var_name
': not a valid identifier
fusionné ensemble (où les .
caractères indiquent quelque chose qui a été écrasé).
Ce serait le cas si votre variable dans cette ligne était vunr_nunmeretour chariot plutôt que plus normale var_name
. Le fait que ce soit Cygwin pointe également vers cette conclusion car il y a souvent des problèmes quand vous éditez vos scripts avec un éditeur Windows qui utilise CR/LF où Cygwin attend juste LF.
Je suppose que vous constaterez que faire un od -xcb
sur votre script actuel montre que vous avez ces fins de ligne Windows sur une ou plusieurs de vos lignes de script.
En fait, je viens de tester cette sous Ubuntu en mettant un CTRL-M
à la fin de juste la ligne read
et la sortie a été (légèrement modifié pour afficher le CTRL-M
):
[email protected]:~$ od -xcb qq.sh ; ./qq.sh
0000000 2123 622f 6e69 622f 7361 0a68 6365 6f68
# ! / b i n / b a s h \n e c h o
043 041 057 142 151 156 057 142 141 163 150 012 145 143 150 157
0000020 2d20 2065 4522 746e 7265 7920 756f 2072
- e " E n t e r y o u r
040 055 145 040 042 105 156 164 145 162 040 171 157 165 162 040
0000040 616e 656d 6120 646e 7020 6572 7373 5b20
n a m e a n d p r e s s [
156 141 155 145 040 141 156 144 040 160 162 145 163 163 040 133
0000060 4e45 4554 5d52 203a 635c 2022 720a 6165
E N T E R ] : \ c " \n r e a
105 116 124 105 122 135 072 040 134 143 042 040 012 162 145 141
0000100 2064 6176 5f72 616e 656d 0a0d 6365 6f68
d v a r _ n a m e \r \n e c h o
^^
144 040 166 141 162 137 156 141 155 145 015 012 145 143 150 157
0000120 2220 6f59 7275 6e20 6d61 2065 7369 203a
" Y o u r n a m e i s :
040 042 131 157 165 162 040 156 141 155 145 040 151 163 072 040
0000140 7624 7261 6e5f 6d61 2265 0a0a
$ v a r _ n a m e " \n \n
044 166 141 162 137 156 141 155 145 042 012 012
0000154
Enter your name and press [ENTER]: Pax
': not a valid identifierar_name
Your name is:
Dans d'autres mots, très similaire à ce que vous voyez.
En aparté (maintenant que j'ai accès à mon environnement Cygwin), ce que vous voyez est la sortie:
abcdefghij.sh: line 99 read: `var_name
`: not a valid identifier
où la deuxième ligne écrasez la première, ce qui donne:
`: not a valid identifierad: `var_name
En d'autres termes, le mot étrange identifierad
est en réalité composé de identifier
et la ad:
finale de read:
. La raison pour laquelle il est seulement semblable à mon exemple ci-dessus (par opposition à exact) est parce que votre nom de fichier et numéro de ligne sera différent de mon petit script de test.
Pour ce que ça vaut, votre exemple fonctionne comme écrit dans mes deux environnements Cygwin et Linux. Essayez cet exemple le plus simple et voyez si cela fonctionne pour vous: 'lisez NAME; echo $ NAME' – meagar
Merci. C'était un problème d'éditeur. J'utilisais Windows en éditant et en sauvegardant plutôt que l'éditeur vi, donc je l'ai fonctionné maintenant. Merci de l'avoir testé. – CrazyGrunt