Здравия желаю! Сегодня расскажу про прикол с Bash-массивами.

А именно — в качестве индекса можно использовать арифметическое выражение.

Чо? Ну смотри, как здоровые люди работают с массивами:

arr=('huy' 'pizdec')

echo "${arr[@]}"
echo "${arr[0]}"
echo "${arr[1]}"

Всё здесь правильно, прям как в книжках! Прочитал и понял, что выведется на экран.

А вот массив курильщика:

arr=('huy' 'pizdec')

echo "${arr[6%2]}"

Что, думаешь, эта херабора выплюнет? А тут «брат»… И выплюнет оно первое слово huy. Но почему?

Потому что гладиолус. Логично: делим 6 на 2, получаем 3. Но у нас нет третьего элемента в массиве. WTF!!??

А мы тут как бы не делим! Не путай деление с «%».

После деления 6 на 2 у нас получился остаток 0. То есть это как бы нулевой индекс массива, получаем huy.

Соответственно, если сделать 7%2, то выведется слово — pizdec. Потому что после деления получился остаток 1.

Ну а чтобы получить 3-й элемент массива, надо подобрать циферки. Ну, например, 5%3, получим остаток 2. И так далее. Ну ты понял.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Вот и вся математика. Хочешь запутать свои Bash-скрипты и порадовать коллег? Нативная обфускация. Дерзай!