You should do an od -xcb
on that script. My guesstimate is that it's almost certainly going to have the wrong line ending character in it.
The reason I suggest this is because the line:
': not a valid identifierad: `var_name
looks suspiciously like the two lines:
.........................ad: `var_name
': not a valid identifier
merged together (where the .
characters indicate something that's been overwritten).
That would be the case if your variable in that line was var_namecarriage-return rather than the more normal var_name
.
The fact that it's Cygwin also points to that conclusion since there's often trouble when you edit your scripts with a Windows editor which uses CR/LF where Cygwin expects just LF.
I suspect you'll find that doing an od -xcb
on your actual script shows that you have those Windows line endings on one or more of your script lines.
In fact, I just tested this under Ubuntu by putting a CTRL-M
at the end of just the read
line and the output was (slightly modified to show the CTRL-M
):
pax@pax-desktop:~$ 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 other words, very similar to what you're seeing.
As an aside (now that I have access to my Cygwin environment), what you're seeing is the output:
abcdefghij.sh: line 99 read: `var_name
`: not a valid identifier
where the second line overwrites the first, giving:
`: not a valid identifierad: `var_name
In other words, the strange word identifierad
is actually made up of identifier
and the final ad:
from read:
. The reason it's only similar to my example above (as opposed to exact) is because your file name and line number will be different to my little test script.