假设这样一个最小任务选择 B 中的元素但不选择 A 中的元素
file_list1=(a.sh b.sh c.sh)
file_list2=(b.sh c.sh d.sh)
for i in files_list1; do
for k in files_list2; do
if [[ $k in $(echo $i) ]]; then
echo
else
echo $k
fi
done
done
它报告错误:
$ bash compare.sh
compare.sh: line 5: conditional binary operator expected
compare.sh: line 5: syntax error near `in'
compare.sh: line 5: ` if [[ $k in $(echo $i) ]]; then'
如果不适用in
,如何让代码工作?
答案1
除了逻辑之外,您还有以下语法错误:
- 它
file_list
不是files_list
。 - 要扩展到数组元素,您需要使用“${file_list[@]}”。
尝试外壳检查在发布之前。
如果您必须在 shell 中执行此操作,请尝试:
file_list1=(a.sh b.sh c.sh)
file_list2=(b.sh c.sh d.sh)
for i in "${file_list1[@]}"; do
repeated_in_A=0
for k in "${file_list2[@]}"; do
if [[ $k == $i ]]; then
repeated_in_A=1
break
fi
done
((repeated_in_A)) || echo "$k"
done