C массивы индексируются начиная с 0
, а не от 1
. C автоматически не выполняет проверку границ доступа к массиву, и, действительно, ваш код хорошо сформирован. Тем не менее, его поведение во время выполнения undefined из-за его использования выражения элемента массива для записи вне границ этого массива и, отдельно, из-за его использования выражения элемента массива для чтения за пределами границ из этого массива.
Поскольку программа определенно демонстрирует неопределенное поведение при каждом запуске, абсолютно ничего нельзя сказать о том, что она должна делать. Если на практике вы наблюдаете тройку ввода, повторяющуюся три раза, то вероятным объяснением является то, что вторая итерация перезаписывает значение переменной count
. Учитывая порядок, в котором объявлены переменные, это правдоподобное проявление неопределенного поведения в игре.
Выходной цикл, с другой стороны, повторяет то же количество раз, что вы ему сказали: один раз с count == 1
и еще раз с count == 2
. Это ни в коем случае не гарантируется с учетом общей неопределенности исполнения вашей программы, но речь идет о наименее неожиданном поведении , о котором я могу думать.
#!/bin/bash
echo $*
bash myecho.sh "$@"
Примечание "$" конструкция не является конкретным ударом и должен работать с любой оболочкой POSIX (это делает с тире, по крайней мере). Обратите внимание также, что, учитывая вывод Вы хотите, Вам не нужен дополнительный уровень заключения в кавычки вообще. Т.Е. просто назовите вышеупомянутый сценарий как:
./test.sh 1 2 "3 4"