Сценарий Bash, чтобы получить и повторно передать заключенные в кавычки параметры

C массивы индексируются начиная с 0, а не от 1. C автоматически не выполняет проверку границ доступа к массиву, и, действительно, ваш код хорошо сформирован. Тем не менее, его поведение во время выполнения undefined из-за его использования выражения элемента массива для записи вне границ этого массива и, отдельно, из-за его использования выражения элемента массива для чтения за пределами границ из этого массива.

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

Выходной цикл, с другой стороны, повторяет то же количество раз, что вы ему сказали: один раз с count == 1 и еще раз с count == 2. Это ни в коем случае не гарантируется с учетом общей неопределенности исполнения вашей программы, но речь идет о наименее неожиданном поведении , о котором я могу думать.

95
задан chilltemp 15 January 2009 в 20:47
поделиться

1 ответ

#!/bin/bash
echo $*
bash myecho.sh "$@"

Примечание "$" конструкция не является конкретным ударом и должен работать с любой оболочкой POSIX (это делает с тире, по крайней мере). Обратите внимание также, что, учитывая вывод Вы хотите, Вам не нужен дополнительный уровень заключения в кавычки вообще. Т.Е. просто назовите вышеупомянутый сценарий как:

./test.sh 1 2 "3 4"
68
ответ дан pixelbeat 5 November 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: