Из комментариев видно, что файл x.file
меньше 32768 байт (32 КиБ ). Это означает, что когда dd
попросят записать 32 КиБ в /dev/vv/
, он не сможет скопировать все это из файла, и последний бит из 32 КиБ останется незаписанным.
Эти неинициализированные данные затем будут скопированы в y.file
с помощью второй операции dd
, и это то, что вы видите, когда открываете этот файл в редакторе.
^@
— это способ отображения нулевого байта в редакторе. Из чтения руководства dd
мне неясно, то ли это то, что было записано в устройство первым dd
, или это ненужные данные, которые уже присутствовали на устройстве до первого вызова dd
.
Можно заменить
options=("Option 1" "Option 2" "Option 3" "Quit")
с
mapfile -t options < list.txt
options+=( "Quit" )
и настройте паттерны case
. Вместо проверки содержимого переменной $opt
вы можете использовать $REPLY
, которая содержит выбранное число и ее легче проверить.
Считать файл в массив:
#!/usr/bin/env bash
readarray -t list < list.txt
PS3='Please enter your choice or 0 to exit: '
select selection in "${list[@]}"; do
if [[ $REPLY == "0" ]]; then
echo 'Goodbye' >&2
exit
else
echo $REPLY $selection
break
fi
done