Должен действительно поблагодарить вас всех еще раз, я всегда плачу свои взносы. Помощь Чарльза, Лобо и Науэля очень многому научила меня в printf, я изменил все свои сценарии, чтобы использовать этот новый метод форматирования, и они работают безупречно.

я есть несколько скриптов bash, которые я запускаю в Ubuntu 14.04 и 16.04 уже более года. Некоторое недавнее обновление Ubuntu сломало bash, и я не могу понять, как с этим разобраться.

Пример:

#!/bin/bash
INPUT=myinput.txt
OUTPUT=myoutput.txt
ACTION1="0;"

cat $INPUT | while read LINE
do
printf "\t\"~${LINE}\"\t\t$ACTION1\n" >> $OUTPUT
done

мой скрипт затем перебирает файл, выполняя оператор printf следующим образом, но это вывод

"~jetmo" 0;
"~spamme" 0;
"~baidu" 0;

пример содержимого файла myinput.txt

jetmon
spammen
baidu

Строки ввода, содержащие строчные буквы n, удаляются ?? Я пропустил некоторые серьезные изменения в bash, которые произошли, это начало происходить неделю назад и сводит меня с ума сейчас.

Я попытался изменить #! / Bin / bash на #! / Bin / sh с теми же результатами.

Также пробовал этот метод зацикливания во входном файле и по-прежнему получать те же результаты.

#!/bin/bash
INPUT=myinput.txt
OUTPUT=myoutput.txt
ACTION1="0;"
while read LINE
do
printf "\t\"~${LINE}\"\t\t$ACTION1\n" >> $OUTPUT
done < $INPUT

Попробовал предложение из комментариев с помощью эха

echo -e -n "\t\"~${LINE}\"\t\t$ACTION1\n" >> $OUTPUT

и теперь я получаю этот вывод

-e -n "~jetmo" 0;
-e -n "~spamme" 0;
-e -n "~baidu" 0;

Запуск hexdump -C myinput.txt дает этот вывод

00000000  6a 65 74 6d 6f 6e 0a 73  70 61 6d 6d 65 6e 0a 62  |jetmon.spammen.b|
00000010  61 69 64 75 0a 0a                                 |aidu..|
00000016

Также изменил имена всех переменных в нижний регистр, как было предложено Майклом, но все равно получил те же результаты.

#!/bin/bash
input=myinput.txt
output=myoutput.txt
action1="0;"

cat $input | while read line
do
printf "\t\"~${line}\"\t\t$action1\n" >> $output
done

РЕШЕНИЕ Тайна разгадана

спасибо всем, ноhttps://stackoverflow.com/users/96588/l0b0 прибил его по голове. У меня былIFS=$'\n' раньше скрывался в моем сценарии.

Теперь у меня есть окончательное, лучшее и безопасное форматирование printf благодаря рекомендациям Науэля и Чарльза, и оно работает на 100% ... не могу вас всех отблагодарить.

#!/bin/bash
input=myinput.txt
output=myoutput.txt
action1="0;"
while IFS= read -r LINE
do
printf '\t"~%s"\t\t%s\n' "${LINE}" "$ACTION1" >> "$output"
done < $input1

Ответы на вопрос(0)

Ваш ответ на вопрос