Создание нового массива в цикле, а затем установка исходного массива в этот новый массив:
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
Модифицированный массив "$@"
.
Зачем запускать его на двоичном файле? Случайно надеяться, что каждый 0x0d0a
должен быть 0x0a
? Он предназначен для текстовых файлов ASCII; Я не уверен, что он даже обрабатывает Unicode. В качестве меры предосторожности он предотвращает повреждение двоичного файла.
Это происходит потому, что, хотя dos2unix
ЗНАЕТ, что два символа 0x0d0a
в текстовом файле — это то, что DOS/Windows использует для конца -строки -, и их следует заменить на 0x0a
. ], Unix/Linux End -of -Line, для «бинарных» файлов все не так однозначно.
«Двоичный» файл может быть исполняемым файлом, архивом, базой данных, файлом данных из какой-то неизвестной программы или сжатыми версиями предыдущего. Они могут содержать пару байтов данных, содержащих 0x0d0a
, или short int
с десятичным значением 3338
, даже инструкцию ЦП.
Простая замена 0x0d0a
на 0x0a
в этих файлах приведет к их поломке, (сделает их нефункциональными ).
Поскольку обычно это Плохая идея, dos2unix
по умолчанию этого не делает.
Но поскольку Unix Way предполагает, что кто-то знает, что делает (стреляйте себе в ногу, если хотите ), и dos2unix
не совершенен в обнаружении "бинарного", существует переопределение в случае ложного срабатывания.