![': 不是一個有效的讀取標識符](https://rvso.com/image/1539553/'%3A%20%E4%B8%8D%E6%98%AF%E4%B8%80%E5%80%8B%E6%9C%89%E6%95%88%E7%9A%84%E8%AE%80%E5%8F%96%E6%A8%99%E8%AD%98%E7%AC%A6.png)
我使用 Notepad++ 並輸入:
read s
echo "$s"
輸出是:
然後我嘗試輸入分號:
read s;
echo "$s"
輸出是:
我將文件另存為q.sh
並使用 cygwin 運行,但我仍然無法使用read
運算符,所以我很困惑。我也嘗試過其他編輯器,vi
但輸出是相同的。
怎麼了?如何讓它發揮作用?
答案1
構成shell腳本的文字檔是用Notepad++寫的。該編輯器預設將文件儲存為 DOS 文字文件,從 Unix 的角度來看,\r
每行末尾有一個多餘的回車符 ( )。這讓人困惑sh
。
要刪除它:
$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh
劇本做缺少#!
-line (如註釋中指出的),但只要您使用明確解釋器(sh q.sh
)運行它,就不需要它。
新增行
#!/bin/sh
將使(在chmod +x q.sh
)之後運行它的行為與./q.sh
使用 運行它完全相同sh q.sh
。
答案2
如果您可以使用 Notepad++,則另一種轉換 Unix 回車符的方法。在記事本中,繼續:編輯 -> EOL 轉換 -> Unix (LF)
在法語中,它是:Edition -> Convertir les sauts de ligne -> Converti au format Unix (LF)
它可以更快。