Ожидаемое целочисленное выражение bash 2

Принятие tty "приготовленный" режим, ctrl - D работает путем завершения входной обработки строки и отправки данных, уже введенных приложением. Таким образом, при вводе "abc", сопровождаемой ctrl - D, те три байта будут отосланы к приложению.

Теперь, как приложение обычно определяет конец файла? EOF принят, когда чтение возвращает 0 байтов. Таким образом, необходимо заставить чтение возвращать 0 байтов. Если вы, в которых первый хит входит и затем ctrl - D, сначала что-либо, которое вы ввели, отправляетесь в приложение вместе с символом новой строки. Затем ctrl - D вызывает любые данные, в которые вы вошли (т.е. ничто!), чтобы быть отправленным в приложение, которое читает 0 байтов и предполагает EOF.

, Если вы входите, что-либо после эти входит прежде, чем совершить нападки ctrl - D затем, приложение получает те нажатия клавиш и ожидает больше. Таким образом для генерации EOF без первого удара входят , совершают нападки ctrl - D дважды подряд.

Так для ответа на вопрос:Вы сначала ввели какие-либо символы (кроме новой строки), прежде чем нажать ctrl - D ? Если да, попробуйте это дважды подряд.

Это можно проверить, например:

$ wc -l
test123     0     1     7

(нажмите ctrl - D дважды после test123 .)

Утилита wc показывает количество прочитанных строк, слов и символов. Строки 0, так как вы не ввели новую строку, а test123 - это одно слово и 7 символов.

0
04.05.2018, 21:04
1 ответ

Вы вызываете команду [с операторами сравнения -lt/ -gtдесятичных целых чисел для операндов, которые не всегда являются десятичными целыми числами.

Вы можете увидеть, что произойдет, если запустить скрипт с bash -x. Вы увидите такие вещи, как:

+ f=
+ '[' '' -gt 0 ']'
./myscript: line 15: [: : integer expression expected

С:

while [ "$i" -lt "$n" ]
do
[...]
   d=${array[$i+1]}

На последнем проходе в этом цикле вы попытаетесь получить доступ за пределами последнего элемента массива, поэтому $dбудет пустым.

Вы также инициализируете $bкак строку 0, а затем обращаетесь к ней как к массиву. Посмотрите также, как f=${b[$j]}даст вам пустой $f, за исключением случая, когда $jравно 0.

Я не знаю, что вы пытаетесь сделать с этим кодом, но, похоже, вам нужно вернуться к чертежной доске.

3
28.01.2020, 02:23

Теги

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