LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

Что конкретно покритиковать?
В суть не вчитывался.
По оформлению - вполне читабельно. Хотя я кое-что писал по-другому:

1. Дело каждого, но я все переменные именую заглавными буквами

2.

x=( [1]=21 [2]=22 [3]=23 )

Почему не
x=( 21 22 23 )

?
Правда тогда индексация с нуля начинается - и правильно.

3.
km=3

Что такое 3? Если длинна массива, то лучше написать
km="${#x[@]}"

По результату - то же, а код более понятный. Если 3 - не длинна массива, то как-то более правильно назвать переменную, или сделать комментарий, объясняющий что такое 3.

И, да, я все значения пишу в двойных кавычках - дабы напоминать себе что в bash всё есть строки.

4.
for ((i=1; i<=km; i++)); do

Тебе нужно пройтись по всем элементам массива то лучше так:
for E in "${x[@]}" ; do

Плюс в том, что будет пропускать «дырки» если таковые есть. Также, не нужно вводить дополнительную переменную km, и не нужно на каждой итерации проверять условия выхода из цикла. Да и вообще более родная для bash конструкция.
Только не забудь двойные кавычки, чтобы значения с пробелами правильно интерпретировались.

5.
if [[ $((${x["$i"]}+1)) -lt $maxx ]]; then
  x["$i"]=$((${x["$i"]}+1))
fi

Когда в блоке if одна команда, проще так:
[[ $((${x["$i"]}+1)) -lt $maxx ]] && x["$i"]=$((${x["$i"]}+1))


6.
case "$r" in

Я люблю вконце писать что-то типа такого:
* ) echo "ERROR in source code" >&2 ;;

ну, и какую-то информацию чтобы было понятно где или почему произошло. Иногда помогает.

Исходная версия Kroz, :

Что конкретно покритиковать?
В суть не вчитывался.
По оформлению - вполне читабельно. Хотя я кое-что писал по-другому:

1. Дело каждого, но я все переменные именую заглавными буквами

2.

x=( [1]=21 [2]=22 [3]=23 )

Почему не
x=( 21 22 23 )

?
Правда тогда индексация с нуля начинается - и правильно.

3.
km=3

Что такое 3? Если длинна массива, то лучше написать
km="${#x[@]}"

По результату - то же, а код более понятный. Если 3 - не длинна массива, то как-то более правильно назвать переменную, или сделать комментарий, объясняющий что такое 2.

И, да, я все значения пишу в двойных кавычках - дабы напоминать себе что в bash всё есть строки.

4.
for ((i=1; i<=km; i++)); do

Тебе нужно пройтись по всем элементам массива то лучше так:
for E in "${x[@]}" ; do

Плюс в том, что будет пропускать «дырки» если таковые есть. Также, не нужно вводить дополнительную переменную km, и не нужно на каждой итерации проверять условия выхода из цикла. Да и вообще более родная для bash конструкция.
Только не забудь двойные кавычки, чтобы значения с пробелами правильно интерпретировались.

5.
if [[ $((${x["$i"]}+1)) -lt $maxx ]]; then
  x["$i"]=$((${x["$i"]}+1))
fi

Когда в блоке if одна команда, проще так:
[[ $((${x["$i"]}+1)) -lt $maxx ]] && x["$i"]=$((${x["$i"]}+1))


6.
case "$r" in

Я люблю вконце писать что-то типа такого:
* ) echo "ERROR in source code" >&2 ;;

ну, и какую-то информацию чтобы было понятно где или почему произошло. Иногда помогает.