Bash
意外標記“完成”附近的語法錯誤 - 讀取行時
我不斷收到此錯誤:
syntax error near unexpected token 'done'
但我不明白為什麼。我嘗試添加
dos2unix *.sh
after#!/bin/sh
,但這只是給了我一個錯誤,除了“完成”錯誤之外沒有這樣的文件或目錄。這是一個 .sh 文件。我對編寫腳本非常陌生。幫助?
我在跑
sh thisfile.sh program_input 輸入
在 Linux 上
編輯我在變數周圍添加了一些引號 - 同樣的錯誤
#!/bin/sh fst=$1 input=$2 while read line do result=$(cat "$line" | program "$fst") if [ "$result" = "" ]; then printf "$line\t=>\t *none* 0\n" else printf "$line\t=>\tyes\n" fi done < "$input"
“$input” 只是四行單詞,比如 “他們” “can” “fish” “they” “can” “take” “table”
如果我執行
cat "$line" | program "$fst"
它工作正常請注意,如果我取出循環中的所有內容並僅 printf $line 它會給出相同的“完成”語法錯誤
syntax error near unexpected token 'done'
是 Bash 在看到保留字之前done
沒有匹配時給出的錯誤do
。它與引號無關,但很可能與您的文件具有 DOS/Windows 樣式的 CRLF 行結尾有很大關係。shell將輸入符 (CR,\r
) 視為正常字元,因此它看不到保留字do
,而是看到do\r
。另一方面,在最後一行它確實辨識done
,因為它與行尾分開,並且 CR 與那個空格分開。通過執行腳本文件本身
dos2unix
。不要在腳本文件中添加dos2unix
命令。