a=0
b=1
for a in ${my_array[@]}
do
for b in ${my_array[@]}
do
if [ " ${my_array[a]} " = " ${my_array[b]} " ]
then
continue
((a++))
fi
done
((b++))
done
您好。我想比较2个字符串。它们在同一个数组中。如果它们是相同的,我只打印其中一个。我怎样才能做到这一点 ?我写了一些代码。有2个(a和b)a的第一个值是0,它存储数组的第一个元素。 b的第一个值是1,它存储1.element数组。我想比较它们,如果它们是相同的字符串,我只打印其中一个。所以我使用“继续”。认为我的代码是真的,但它不起作用。这是一个我无法看到的错误。你能救我吗?
例如它就像那样运行。
Enter words :
erica 17
sally 16
john 18
henry 17
john 18
jessica 19
如你所见,有2个约翰18,我不想要他们两个。我的程序将检查有2个字符串是否相同。如果它们是相同的,我将只使用其中一个。
答案 0 :(得分:0)
if ifment" =" - 分配," ==" - 比较。
答案 1 :(得分:0)
如果我理解正确,你想要统一数组的元素。如果这是正确的,那么下面的stackoverflow问题(How can I get unique values from an array in Bash?)似乎在以下单行中回答:
echo "${my_array[@]}" | tr ' ' '\n' | sort | uniq
不幸的是,由于您的输入词(或数组元素)包含空格,因此上述操作无法正常工作。问题是因为第一个回波会将数组展平为空格分隔的元素。解决方法是使用printf并删除'tr'。这是......
printf '%s\n' "${my_array[@]}" | sort | uniq -c
但这改变了原始数组中元素的位置。希望没事?
答案 2 :(得分:0)
您可以使用sort
和uniq
来获得所需的输出:
echo "${my_array[@]}" | tr ' ' '\n' | sort | uniq -c | tr '\n' ' '
如果你的输入中有空格,你可以使用它:
printf '%s\n' "${my_array[@]}" | sort | uniq -c
通过这种方式,您将获得字符串发生的次数,但它只打印一次。