簡體   English   中英

Bash'source':意外令牌附近的語法錯誤`then'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM