Sie sollten an diesem Skript ein od -xcb
tun. Mein guesstimate ist, dass es mit ziemlicher Sicherheit geht in die falsche Zeile in ihm hat Endzeichen.
Der Grund, warum ich dies vorschlagen, ist, weil die Zeile:
': not a valid identifierad: `var_name
sieht verdächtig wie die beiden Linien:
.........................ad: `var_name
': not a valid identifier
verschmolzen zusammen (wo die .
Zeichen zeigen etwas, das überschrieben worden ist).
Das ist der Fall, wenn Ihre Variable in dieser Zeile veinr wäre _neinmeWagenrücklauf- anstatt die normal war var_name
.
Die Tatsache, dass es Cygwin verweist auch auf diesen Schluss da oft gibt es Probleme, wenn Sie Ihre Skripte mit einem Windows--Editor bearbeiten, die CR/LF-Anwendungen, bei denen Cygwin nur LF erwartet.
Ich vermute, Sie werden feststellen, dass eine od -xcb
auf Ihrem tatsächlichen Skript zeigt, dass Sie diese Windows-Zeilenenden auf eine oder mehrere Ihrer Skriptzeilen haben.
In der Tat, ich dies unter Ubuntu nur getestet, indem ein CTRL-M
am Ende nur die read
Linie setzen und die Ausgabe wurde (leicht die CTRL-M
zeigen modifiziert):
[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:
In anderen Wörter, sehr ähnlich wie Sie sehen.
Als Neben (jetzt, dass ich Zugriff auf meine Cygwin-Umgebung haben), was Sie sehen, ist die Ausgabe:
abcdefghij.sh: line 99 read: `var_name
`: not a valid identifier
wo die zweite Zeile der ersten überschreibt, geben:
`: not a valid identifierad: `var_name
Mit anderen Worten, das seltsame Wort identifierad
eigentlich aus identifier
und den endgültigen ad:
von read:
gemacht. Der Grund, dass es nur meinem obigen Beispiel ähnlich ist (im Gegensatz zu genau) ist, weil Ihr Dateiname und Ihre Zeilennummer sich von meinem kleinen Testskript unterscheiden.
Für das, was es wert ist, funktioniert Ihr Beispiel wie in meinen Cygwin und Linux-Umgebungen geschrieben. Versuchen Sie dieses einfachste Beispiel und sehen Sie, ob es für Sie funktioniert: 'Lesen Sie NAME; echo $ NAME' – meagar
Danke. Es war ein Editor-Problem. Ich habe Windows-Editing und -Speichern anstelle des VI-Editors verwendet, so dass ich jetzt arbeite. Danke fürs Testen. – CrazyGrunt