«Использовать диск Super Grub»https://www.supergrubdisk.org/
Надеюсь, я помог.
Вы выявили интересную проблему...
Проблема заключается в отсутствии совместимости с POSIX в dash
.
POSIX различает базовый уровень совместимости POSIX для крошечных встроенных систем и более крупных систем (, таких как, например. Linux ), заявленная совместимость с UNIX. В последнем случае в системе должны быть реализованы все так называемые расширения XSI.
Система, совместимая с XSI, должна была бы расширить некоторые символы обратной косой черты в аргументах echo
.
bash
может быть скомпилирован для соответствия POSIX/XSI (, и это, например. сделано в Solaris и MacOS ), но не для бинарного файла bash
в Linux. Если bash
скомпилирован для совместимости с POSIX/XSI, он правильно обрабатывает экранирование обратной косой черты для аргументов echo
, и ваш пример кода будет работать с таким двоичным файлом bash
из Solaris или MacOS,потому что в вашем примере кода нет управляющей последовательности POSIX/XSI.
Поскольку bash
в Linux не совместим с XSI, он вообще не расширяет переходы обратной реакции для аргументов echo
, поэтому код вашего примера работает с bash
и в Linux.
dash
, с другой стороны, заявляет о соответствии POSIX/XSI и расширяет символы обратной косой черты для аргументов echo
. Если dash
правильно реализует соответствие POSIX/XSI, код вашего примера также работает с dash
. Это связано с тем, что код вашего примера не содержит escape-последовательности обратной косой черты POSIX/XSI.
POSIX/XSI требует echo
для расширения:
\0nnn for an octal number that represents the related character
Ваш пример кода содержит последовательности обратной косой черты:
\1 for the first sed subexpression
и
\2 for the second sed subexpression
, и это не является частью управляющих последовательностей POSIX/XSI echo
, поэтому встроенная функция echo
из оболочки, совместимой с POSIX, не может их расширять. Однако dash
неверно расширяет \1
и \2
как восьмеричные числа, даже несмотря на то, что это запрещено POSIX. Вот почему ваш пример кода не работает с dash
.
Я рекомендую вам сделать отчет об ошибке -относительно dash
и либо дождаться исправления, либо заменить echo arg
на printf '%s\n' arg
. Это работает даже с dash
, потому что известная ошибка встроенной функции printf
в dash
не влияет на ваш случай.
Итак, мы можем перечислить ошибки POSIX/XSI из dash
как:
не поддерживает многобайтовые символы -.
расширяет \nnn
в echo
аргументах, хотя это запрещено
не расширяет \nnn
в аргументах printf
, хотя это и требуется.