2012-12-26 20 views
0

代碼片段是在這裏:比較中的ksh腳本×2個陣列

#!/usr/bin/ksh 

    diff(){ 
    awk 'BEGIN {RS=ORS= } 
      {NR==FNR?a[$0]++:a[$0]--} 
        END{for(k in a)if(a[k])print k}' < (echo -n "${!1}") < (echo -n "${!2}") 
    } 

        Array1=(key1 key2 key3 key4 key5 key6 key7 key8 key9 key10) 
        Array2=(key1 key2 key3 key4 key5 key6) 
        Array3=($(diff Array1[@] Array2[@])) 
        echo ${Array3[@]} 

和我對着錯誤

syntax error at line 6 : `(' unexpected 
+0

請添加標記,以表明您使用的是什麼操作系統,即AIX /的Solaris/HP或其他Unixen。如果您使用的是Linux,請將其編輯爲'echo $ {。sh.version}'返回的值。如果您使用的是這裏列出的舊的Unix(以及其他),那麼您幾乎肯定會使用ksh88,它不支持上面使用的所有語法。祝你好運。 – shellter

回答

0

你提到的語法時才錯誤是監守的空間<後,過程你應該使用的替代:

<(echo -n "${1}") <(echo -n "${2}") 

!是非常可疑的(我得到一個synta x錯誤),我不確定你在這裏試圖達到什麼目的。

而且,你是不是傳遞數組到函數,只是他們的名字。你的意思是:

Array3=($(diff "${Array1[@]}" "${Array2[@]}")) 

當然,你不能將數組傳遞給函數,只能列表。

這是一個壞主意,調用自己的功能diff,因爲不存在與可能會引起混淆的名稱相同的標準應用程序。

0

看起來像你想兩個數組放在一起比較,發現可以通過associative arrays in AWK or KSH完成的差異。但是,如果您正在查看更大的集合,如果您不會遇到某些KSH陣列大小限制,我不能100%確定。 (還是我錯了。)

KSH: 
typeset -A aArray;          # Declare 
aArray=([this]=1 [that]=2 [who]=3 [what]=4 [where]=5); # Assign 
print ${aArray[@]}          # Print out the elements. 
print ${aArray[one]}         # Index 

AWK: 
aArray["this"]=1;aArray["that"]=2;aArray["who"]=3;aArray["what"]=4;aArray["where"]=5; # Declare 
for (KEY in aArray) print KEY" Value at KEY: "aArray[KEY];              # Print 

乾杯, TK