Я использовал USB-устройство записи образов на моем виртуализированном linux mint и на этот раз с usb 2 для записи linux mint ISO. ЭТО РАБОТАЕТ! Я могу загрузиться с живого диска на моем основном компьютере
сначала ваша функция printf работает отлично
$ export c=" "
$ LC_CTYPE=C printf "%d\n" "'$c"
32
Но запуск строки сценария с -vx показывает, что данные, поступающие в эту строку, неверны (я не буду вставлять этот вывод)
Итак, я полагаю, что это чтение это не правильно. Разделителем EOL по умолчанию для чтения является новая строка, поэтому я попытался изменить это. Кажется, это работает
while IFS= read -d\0 -r -n1 c; do ch=$(LC_CTYPE=C printf "%d\n" "'$c") ; echo "ch=$ch"; done < input_file_name
Программа read
не ошибается, но вы немного неправильно интерпретируете результаты.
Маркер EOL - это \n
, поэтому ввод этого символа означает, что read
встретил "строку", в которой нет символов. Обратите внимание, что переменная $c
не содержит \n
:
while IFS= read -r c
do
test -z "$c" && echo "Zero length string" || echo "I read '$c'"
done
Добавляя -n1
, вы ограничиваете количество считываемых символов только одним. Как и в примере выше, \n
не является частью принимаемой строки, поэтому read
возвращает "ничего", когда вы вводите \n
:
while IFS= read -r -n1 c
do
test -z "$c" && echo "Zero length string" || echo "I read '$c'"
done
Команда printf
интересна. Если вы подадите ей строку нулевой длины с префиксом в одну кавычку, вы также получите из нее '0', поэтому я подозреваю, что ответ здесь - "не делайте этого":
LC_CTYPE=C printf "%d" "'" | od -c
0000000 0