Почему dos2unix по умолчанию прерывает преобразование файлов со специальными символами?

Создание нового массива в цикле, а затем установка исходного массива в этот новый массив:

target_array=(
    "item1 -a100 -b250 -caaa"
    "item2 -a110 -cbbb -d1sa"
    "item3 -d2sa -exxx -fyyy"
)

for target_item in "${target_array[@]}"; do
    # Do Stuff Here
    # and create new items
    x=111
    y=222
    z=333

    new_array+=( "$target_item -x$x -y$y -z$z" )
done

target_array=( "${new_array[@]}" )

Использование /bin/sh(, потому что я предпочитаю синтаксис, необходимый для работы с $@, а не bashнесколько громоздкий синтаксис массива):

set -- \
    "item1 -a100 -b250 -caaa" \
    "item2 -a110 -cbbb -d1sa" \
    "item3 -d2sa -exxx -fyyy"

for target_item do
    # Do Stuff Here
    # and create new items
    x=111
    y=222
    z=333

    set -- "$@" "$target_item -x$x -y$y -z$z"
    shift
done

Модифицированный массив "$@".

0
07.08.2020, 04:11
2 ответа

Зачем запускать его на двоичном файле? Случайно надеяться, что каждый 0x0d0aдолжен быть 0x0a? Он предназначен для текстовых файлов ASCII; Я не уверен, что он даже обрабатывает Unicode. В качестве меры предосторожности он предотвращает повреждение двоичного файла.

0
18.03.2021, 23:14

Это происходит потому, что, хотя dos2unixЗНАЕТ, что два символа 0x0d0aв текстовом файле — это то, что DOS/Windows использует для конца -строки -, и их следует заменить на 0x0a. ], Unix/Linux End -of -Line, для «бинарных» файлов все не так однозначно.

«Двоичный» файл может быть исполняемым файлом, архивом, базой данных, файлом данных из какой-то неизвестной программы или сжатыми версиями предыдущего. Они могут содержать пару байтов данных, содержащих 0x0d0a, или short intс десятичным значением 3338, даже инструкцию ЦП.

Простая замена 0x0d0aна 0x0aв этих файлах приведет к их поломке, (сделает их нефункциональными ).

Поскольку обычно это Плохая идея, dos2unixпо умолчанию этого не делает.

Но поскольку Unix Way предполагает, что кто-то знает, что делает (стреляйте себе в ногу, если хотите ), и dos2unixне совершенен в обнаружении "бинарного", существует переопределение в случае ложного срабатывания.

0
18.03.2021, 23:14

Теги

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