0

代码片段在这里:

  #!/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
4

2 回答 2

0

您提到的语法错误是因为 , 之后的空格<,您应该使用:

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

!是非常可疑的(我得到一个语法错误),我不确定你想在这里实现什么。

此外,您没有将数组传递给函数,只是它们的名称。你的意思:

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

当然,您不能将数组传递给函数,只能传递列表。

调用自己的函数是个坏主意diff,因为有一个同名的标准实用程序可能会引起混淆。

于 2012-12-27T12:22:00.653 回答
0

看起来您正在尝试将两个数组一起比较并找到可以通过AWK 或 KSH 中的关联数组完成的差异。但是,如果您正在查看更大的集合,我不能 100% 确定您是否不会遇到一些 KSH 数组大小限制。(或者我错了。)

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

干杯,传统知识

于 2013-07-29T22:37:25.527 回答