你照著教學做,把一行指令從網頁複製下來、貼進終端機、按下 Enter,然後得到 syntax error 或 command not found。你回去重看教學,指令看起來一模一樣。於是你懷疑自己裝錯了東西,重裝一次 —— 還是一樣。
絕大多數時候,問題不在指令,在「複製貼上」這個動作本身。 網頁上的文字與終端機接受的文字不是同一種東西,中間有四種常見的轉換失敗。四種都有明確的確認方法,不需要猜。
這篇假設你已經會打開終端機。如果還不會,先讀 終端機與 CLI 保命指南。
一、智慧引號:最常見,也最難用眼睛發現
部落格與文件網站常常為了排版好看,把直引號自動換成彎引號。這兩種在螢幕上看起來幾乎一樣,但對終端機來說是完全不同的字元:
你看到的(網頁): echo "hello"
你貼進去的: echo “hello”
終端機的理解: echo 後面接了一個它不認識的字
怎麼確認:把貼好的指令不要按 Enter,先看引號的形狀。直的 " 是對的;彎的 “ ” 是錯的。另一個更可靠的辦法是把它貼進純文字編輯器(不是 Word、不是網頁輸入框),純文字編輯器不會幫你美化,形狀會誠實顯示。
怎麼修:手動把彎引號打掉、重新輸入直引號。終端機裡的引號一定是你自己打的那一組最可靠。
這個坑在 macOS 特別常見,因為系統層級有「智慧引號」自動替換。如果你是在 macOS 的「備忘錄」或某些編輯器裡中轉過指令,很可能在那一步就被換掉了。
二、多行指令被截斷
很多指令在文件裡是這樣呈現的:
curl -fsSL https://example.com/install.sh \
| bash
那個行尾的 \ 不是裝飾,它的意思是「這一行還沒結束」。複製的時候如果只選到第一行、漏掉 \,或者 \ 後面不小心多了一個空格,終端機就會把它當成兩條指令,第二條 | bash 單獨執行會報錯。
怎麼確認:貼進去之後按 Enter,看提示符有沒有變成 >。變成 > 代表終端機知道指令還沒完,在等你繼續 —— 這是正常的,不是卡住了。這時候剩下的部分貼進去、再按 Enter 就會執行。
怎麼修:整段一起選、一起複製,包含行尾的 \。或者把多行改成一行(去掉 \,中間留一個空格),只要語法允許。
|(管線)開頭的行也是同一個問題:| bash 必須接在前一行之後,不能單獨存在。
三、看不見的空白字元
從某些網頁、PDF、或聊天軟體複製出來的文字會帶著不換行空格(non-breaking space)。它看起來跟普通空格一模一樣,但終端機不認得,會把它當成指令名稱的一部分。
症狀很特徵:你明明打的是 npm install,終端機卻說找不到一個叫 npm install(中間那個不是空格)的命令。
怎麼確認:最可靠的方法是不要複製,改用手打。手打一遍就成功、複製貼上就失敗,那就是空白字元的問題。
怎麼修:手打。指令通常不長,手打十秒鐘比除錯十分鐘划算。
同一類問題還包括:從 PDF 複製時行尾被插入換行、從聊天軟體複製時整段被包在一種特殊的格式化區塊裡。PDF 與聊天視窗是最不可靠的兩個指令來源,能從官方文件網站複製就從那裡複製。
四、貼進了錯誤的 shell 或錯誤的地方
終端機裡跑的程式叫 shell,常見的有 bash、zsh、PowerShell。它們的語法不一樣。同一件事在 macOS/Linux 的 bash 與 Windows 的 PowerShell 寫法不同:
# bash / zsh(macOS、Linux)
export API_KEY="abc123"
# PowerShell(Windows)
$env:API_KEY = "abc123"
把 bash 的寫法貼進 PowerShell 會報錯,反之亦然。這不是哪一邊錯了,是兩種語言。
怎麼確認你在哪一個:
echo $0
在 macOS/Linux 上通常會印出 -zsh 或 -bash。Windows 上如果你開的是「PowerShell」視窗,標題列會寫;如果是「命令提示字元」(cmd),那語法又是第三種。
另一種常見錯誤:你以為自己在終端機裡,其實游標停在某個程式的互動介面裡。例如你已經啟動了某個 AI 工具的對話介面,這時候貼進去的指令會被當成對 AI 說的話,而不是給系統執行的指令。
怎麼確認:看提示符。終端機的提示符通常長得像 user@machine ~ % 或 C:\Users\you>;程式自己的介面通常長得不一樣(可能有 >、>>>、或一個輸入框)。如果不確定,按 Ctrl+C 或輸入 exit 退出當前程式,回到終端機再貼。
一個通用的除錯順序
遇到「照著教學做卻失敗」,按這個順序檢查,不要跳:
- 讀最後一行錯誤訊息,不是第一行。最後一行通常才是真正的原因。見 終端機與 CLI 保命指南 的錯誤訊息章節。
- 確認你貼進去的文字與教學完全一致 —— 特別是引號形狀與行尾的
\。 - 手打一遍。成功了就是複製貼上的問題(空白字元或智慧引號)。
- 確認你在對的 shell、對的地方(終端機而不是某個程式的輸入框)。
- 以上都不是,才開始懷疑安裝本身。
「重裝一次」幾乎從來不是解法。 如果問題是智慧引號,重裝一百次也還是智慧引號。重裝只是讓你多花十分鐘,並且錯過真正的原因。
為什麼這件事值得單獨講
因為它造成的失敗看起來像你的能力問題,實際上是文字編碼問題。初學者遇到 syntax error 的直覺是「我不會用」,於是放棄或重裝;但真正的原因可能只是一個彎引號。
這類失敗還有一個討厭的性質:它不會告訴你哪裡錯。錯誤訊息會說 syntax error near unexpected token,但不會說「你的引號是彎的」。所以知道這四種可能性存在,比讀懂錯誤訊息更有用。
下一步
- 終端機與 CLI 保命指南 —— 十行覆蓋大多數日常需求的指令,以及怎麼讀錯誤訊息
- 開始之前:先認識 20 個詞 —— 如果
shell、PATH、環境變數這些詞還不確定,先補這裡 - 開發環境設定 —— 確認你的環境真的能跑東西
- 安裝 Cursor / 安裝 WorkBuddy —— 把這篇學到的用在真正的安裝上
- CLI(命令列介面) / Shell(殼層) / PATH 與路徑 / 環境變數與 .env —— 這四個詞的定義與為什麼它們會擋住你