你應該對劇本做一個od -xcb
。我的猜測是,它幾乎肯定會有錯誤的行結束字符。
的原因,我認爲這是因爲該行:
': not a valid identifierad: `var_name
看上去非常像兩行:
.........................ad: `var_name
': not a valid identifier
合併在一起(其中.
字符表示東西是被覆蓋)。
這將是,如果你在該行的變量是v一個[R_ň一個米Ë回車,而不是更加正常的情況下var_name
。
Cygwin的事實也指出了這個結論,因爲當你編輯你的腳本時,經常會遇到麻煩,因爲編輯器使用CR/LF,而Cygwin只需要LF。
我懷疑你會發現在你的實際腳本上做一個od -xcb
表明你在一條或多條腳本行上有這些Windows行結束符。
事實上,我只是通過把一個CTRL-M
在剛剛read
行的末尾測試了這個在Ubuntu下,輸出爲(略作修改,以顯示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:
在其它文字,非常類似於你所看到的。
順便說一句(現在,我有機會到我的Cygwin環境),你看到的是輸出:
abcdefghij.sh: line 99 read: `var_name
`: not a valid identifier
其中第二線覆蓋第一,贈送:
`: not a valid identifierad: `var_name
換句話說,在陌生的詞identifierad
實際上是由的identifier
和read:
最終ad:
。之所以和上面的例子類似(相對於確切的例子)是因爲你的文件名和行號與我的小測試腳本不同。
對於它的價值,您的示例在我的Cygwin和Linux環境中均可正常工作。試試這個最簡單的例子,看看它是否適用於你:'閱讀NAME; echo $ NAME' – meagar 2010-04-09 00:24:24
謝謝。這是一個編輯問題。我正在使用Windows編輯和保存,而不是vi編輯器,所以我現在就開始工作。感謝您對它進行測試。 – CrazyGrunt 2010-04-09 01:11:48