for i in "${array[@]}"
перебирает значения ассоциативного массива. Если вы хотите перебрать клавиши, это for in "${!array[@]}"
в bash
. Так:
#! /bin/bash -
T=${1?Please pass a decimal integer number as argument}
nums=(2 7 11 15)
ret=1
if [[ ! $T =~ ^-?[0-9]+$ ]]; then
printf >&2 '"%s" is not a valid integer number\n' "$T"
exit 2
fi
for i in "${!nums[@]}"; do
for j in "${!nums[@]}"; do
if ((nums[i] + nums[j] == T)); then
printf '%s\n' "i=$i nums[i]=${nums[i]}" "j=$j nums[j]=${nums[j]}"
ret=0
break 2
fi
done
done
exit "$ret"
Обратите внимание, что важно проверять входное число, переданное в качестве аргумента, поскольку в противном случае код может привести к уязвимости выполнения произвольной команды.
Также обратите внимание, что bash
понимает числа с ведущими нулями как восьмеричные числа, поэтому 010 будет пониматься как 8, а не 10.
Проблема была связана с тем, что я часто использовал standend ()для возврата функций рисования обратно к белому на черном тексте. По какой-то причине это не делало того, что я ожидал от некоторых дистрибутивов. Явным образом сообщив attron ()пару цветов, которая была явно определена как черный и белый, я решил проблему. Это хакерское и жестко закодированное -решение, возникшее из-за того, что я злоупотреблял библиотекой ncurses в жестко -закодированном виде.