[英]Bash 'source': syntax error near unexpected token `then'
我有一個簡單的bash腳本:
#!/bin/bash
if [ -n "abcd" ]; then
echo "a non-empty string"
else
echo "an empty string"
fi
腳本運行正常:
$ bash test.sh
non-empty string
但是,當我嘗試它源 ,產生一個奇怪的錯誤信息:
$ source test.sh
bash: ./test.sh: line 3: syntax error near unexpected token `then'
bash: ./test.sh: line 3: `if [ -n "abcd" ]; then
歡迎任何建議。 任何包含if
命令的腳本都會出現問題,包括Fedora的/etc/bashrc
和我的其他腳本。
$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)
如果命令包含then
shell關鍵字而沒有相應的if
關鍵字,則會發生此類錯誤。
如果單詞if
用於定義別名,則在Bash解析命令之前將擴展別名,從而導致此類錯誤。 這可以通過運行type -a if
來檢查。 如果它已被別名,您將看到類似的輸出
if is aliased to <some command>
if is a shell keyword
然后, unalias if
要刪除別名,則可以通過運行unalias if
來解決此問題。
運行bash test.sh
,新shell是非交互式的,默認情況下,Bash只擴展交互式shell的別名。 運行source test.sh
意味着文件中的命令在當前(交互式)shell中進行了解釋,並且擴展了有問題的別名。
為了將來參考,如果交互式shell中存在問題,但非交互式shell中存在問題,則需要運行alias
來檢查已定義的別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.