我正在学习bash,并且我正在尝试将序列元素(补丁或子阵列)位置识别为数组。 例如:
array=(9 5 8 3 2 7 5 9 0 1 1 5 4 3 8 9 6 2 6 5 7 9 8);
patch=(0 1 1 5)
我想获得一个输出等于8(我的补丁相对于数组的起始位置)或11(最终位置)。
答案 0 :(得分:1)
bash
没有任何内置工具可以做到这一点;你需要亲自走完阵列:
for ((i=0; i<${#array[@]}; i++)); do
for ((j=0; j<${#patch[@]}; j++)); do
# Make sure the corresponding elements
# match, or give up. RHS is quoted to ensure
# actual string equality, rather than just pattern matching
[[ ${array[i+j] == "${patch[j]}" ]] || break
done
if [[ $j == ${#patch[@] ]]; then
# All the comparisons succeeded!
start=$i
finish=$((i+j-1))
break
fi
done