代码段在这里:
#!/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 :(得分:0)
你提到的sytax错误是因为<
之后的空间,你应该使用的进程替换:
<(echo -n "${1}") <(echo -n "${2}")
!
非常可疑(我收到语法错误),而且我不确定你要在这里实现什么。
此外,您没有将数组传递给函数,只是它们的名称。你的意思是:
Array3=($(diff "${Array1[@]}" "${Array2[@]}"))
当然你不能将数组传递给函数,只能传递列表。
调用自己的函数diff
是一个坏主意,因为有一个标准的实用程序具有相同的名称,可能会引起混淆。
答案 1 :(得分:0)
看起来您正在尝试将两个数组进行比较,并找出associative arrays in AWK or 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
干杯, TK