2013-06-18 50 views
0

在bash,語法錯誤,間接擴張變量聲明

我要指出的是,變量$ Lambda0_List等,都從輸入文件前面的代碼讀取。

PARAM_ARRAY=("Lambda0" "N" "M" "Sigma") 

for i in "${PARAM_ARRAY[@]}" 

do 

List="$i"_List 

Vary="$i"_Vary 

Use_Range="$i"_Use_Range 

Initial_Str="$i"_Initial 

Final_Str="$i"_Final 

Step_Str="$i"_Step 

Initial=${!Initial_Str} 

Step=${!Step_Str} 

Final=${!Final_Str} 

if [ "${!Vary}" == "T" ] 

then 

    if [ "${!Use_Range}" == "T" ] 

    then 

    eval "$List=(`seq $Initial $Step $Final `)" 

    echo "$i : vary, use_range" 

    else 

    echo "$i: vary, use list" 

    fi 

fi 

done 

拋出一個語法錯誤附近意外的標記

語法錯誤'(」

通常我能夠解釋錯誤並找到解決方案,但我不明白爲什麼「(」是一個意外的標記。

編輯:

我發現,如果我在shell中運行它此行的工作,但不是在我的劇本,

編輯:

有問題的線擺弄周圍,我發現即使其註釋掉,我也會得到語法錯誤!

/test.sh:行266:附近意外的標記語法錯誤'(」

./test.sh:行266:######## eval "$List=( SEQ美元的首次$ $步最後`)「」

+0

什麼變量的值? – Koterpillar

+0

我已經更新了問題以包含變量賦值。 儘管首字母I的外觀與eval語句不同,但它們在我的代碼中鍵入的內容相同。 –

回答

0

通過一些早期的代碼篩選之後,我固定的「一些問題與」,而這個錯誤不再來。我是BASH的新手,所以我沒有想到帶有')'的錯誤信息是由100行以上的引用引起的。

0

!決賽後,你有一個),而不是}

+0

這是提交問題時的錯字,我在這裏修復了它。 我試過洗牌周圍的變量名,所以我不需要間接擴張,所以它看起來像: EVAL「$名單=(''$序列初始步驟$ $決賽'')」, 再次,它在終端中工作,但不在腳本中。 –

+0

你可以粘貼你正在使用的實際代碼,而不是鍵入它?誰知道原始腳本 – dannrob

+0

中可能存在的其他錯誤是否合理。 –

0

爲什麼不使用elif或case?

的eval 「$名單=(seq $Initial $Step $Final)」

代替

的eval 「$ {名單=(seq $Initial $Step $Final)}」 或EVAL 「$ {名單= seq $Initial $Step $Final}」