【发布时间】:2014-03-30 02:22:02
【问题描述】:
这件作品:
arr[0]="XX1 1"
arr[1]="XX2 2"
arr[2]="XX3 3"
arr[3]="XX4 4"
arr[4]="XX5 5"
arr[5]="XX1 1"
arr[6]="XX7 7"
arr[7]="XX8 8"
duplicate() { printf '%s\n' "${arr[@]}" | sort -cu |& awk -F: '{ print $5 }'; }
duplicate_match=$(duplicate)
echo "array: ${arr[@]}"
# echo "duplicate: $duplicate_match"
[[ ! $duplicate_match ]] || { echo "Found duplicate:$duplicate_match"; exit 0; }
echo "no duplicate"
使用相同的代码,这个不起作用,为什么?
arr[0]="XX"
arr[1]="wXyz"
arr[2]="ABC"
arr[3]="XX"
【问题讨论】:
-
您的代码实际上不起作用,因为
sort -cu在输入尚未排序时失败;它在第一个数据集中找到的重复项恰好是第一个无序出现的项目。 -
管道符号组合仅在c-shell中有效,在bash中无效
-
@chepner 谢谢,我将搜索如何在正确的位置对我的数组进行排序。
-
@thom
|&在版本 4 中也被添加到bash。 -
@chepner 谢谢,我的立场是正确的。管道符号确实有效。
标签: arrays bash duplicates