2013-08-29 94 views
1

我寫了一個shell腳本,它在運行bash shell的服務器上執行數據操作。函數失敗 - shell腳本從Bash轉換爲Korn

我的腳本有哪些ZIP文件

function getCTLfile() { 
    for i in ${Array[@]}; do 
    if [[ `echo ${i}|awk -F . '{print $NF}'` == "ctl" ]]; then 
     echo "${i}" 
    fi 
    done 
} 

內檢索數據的功能,它的偉大工程,但是這款機器的硬件有故障所以我們的系統管理員要求我端口我的代碼到另一臺服務器上運行的Korn shell。

當我運行我的腳本,它失敗了我的功能!即使我從命令行輸入它。

$ function getCTLfile() { 
-ksh: syntax error: `(' unexpected 

我需要在任何地方更改語法嗎?我做了一些研究,似乎一切都應該起作用。

+1

代碼評論:'if [[「$ i」== * .ctl]]'更清晰。你幾乎肯定要引用'「$ {Array [@]}」' –

+2

'case $ i in * .ctl)echo「$ i」;; esac'是一個更簡單,便攜,和慣用的。 – tripleee

回答

6

ksh中的函數聲明語法或者使用function關鍵字括號,但不能同時使用兩者。省略括號或function關鍵字,它應該工作。

+0

該死的。我沒有注意到那個細節。答對了。接受並投票決定。我瘋了!謝謝!!! – Chris

+2

@Chris:順便提一下,請注意ksh93中兩種語法在功能上存在差異,特別是聲明('typeset')變量的範圍。 – cdarke