ddсделает все за вас одной командой. Установите размер блока в 1 байт, пропустите 25 первых байтов, подсчитайте до размера файла за вычетом пропуска и конечных байтов.
100 byte file
file.img
dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73
Двойная проверка чисел может привести к отсчету от 0.
Рассмотрим не -оболочки Bash, в которых нет строк Bash here -(<<<"..."
)или подстановок процессов (<(...)
), а также тот факт, что некоторым людям необходимо писать сценарии, демонстрирующие уровень переносимости между системами.
Здесь -документы используются всякий раз, когда многострочный -строковый предварительно -отформатированный фрагмент текста должен быть отправлен утилите, возможно, с выполнением или без выполнения подстановки переменных и т. д. в его содержимом.
В скрипте это может быть полезно для предоставления пользователю некоторого текста, например:
Во избежание утомительного
echo 'Usage:'
echo " $0 [-a|-b] file [file...]"
echo
echo 'Options:'
(Посмотрите в книге реальный пример того, как кто-то действительно делает это, и попытайтесь отследить, какие строки оцениваются, а какие нет. Это точно не пройдет проверку моего кода:https://books.google.com/books?id=0LvYSCi7QsIC&pg=PA201)
Вместо этого можно просто передать здесь -документ вcat
:
cat <<-END_USAGE
Usage:
$0 [-a|-b] file [file...]
Options:
END_USAGE
Это, кстати, также дает возможность сделать определенный объем документирования сценария путем разумного выбора здесь -документа "тэг" (END_USAGE
, END_FTP
и т.д. ).
Это также полезно для отправки готовых сценариев таким утилитам, как ftp
или другим программам, способным считывать последовательности команд со своего стандартного ввода.
Как Bash-программист,вы, очевидно, можете использовать способ работы Bash, но я действительно думаю, что здесь -документы по-прежнему обеспечивают более чистый способ отправки предварительно -отформатированного документа команде, чем использование длинной и бессвязной строки.
Удаление здесь -документов из Bash также сделало бы Bash бесполезным в качестве кандидата на /bin/sh
в большинстве систем Unix, поскольку это серьезно нарушило бы его соответствие POSIX.