строки отсутствуют после конкатенирования двух или более переменных строк в bash

Когда я запускаю цикл while while и пытаюсь конкатенировать две переменные строки (из двух циклов), конечный вывод (строка) является странным. Я пробовал другой способ конкатенации, но не получил ответа: Ниже приведен код: [Мне нужно vfile="var1_Amon_My_model1*.nc" ]

 #!/bin/bash jcount=1 extn="*.nc" while read line do mname=$line echo " Working on model - " $mname echo " and model number = "$jcount while read line do vname=$line vfile="${vname}""_Anom_""${mname}""${extn}" echo $vfile done<varlists.txt echo "******************************************" jcount=$((jcount+1)) done<model_test1.txt 

В файле varlists.txt

 var1 var2 

В файле model_test1.txt

 My_model1 My_model2 

После выполнения скрипта он показывает

  Working on model - My_model1 and model number = 1 *.ncm_My_model1 *.ncm_My_model1 ****************************************** 

One Solution collect form web for “строки отсутствуют после конкатенирования двух или более переменных строк в bash”

В ваших текстовых файлах заканчиваются линии Windows / DOS CRLF.

Строки конкатенируются правильно, но байт возвращаемого байта остается в конце vname и mname , потому что он не является частью строки, заканчивающейся в Unix, и поэтому не использовался при read . Когда вы печатаете строку, вместо этого отображается искажение. Возврат каретки возвращает курсор назад к началу строки (например, пишущей машинке), позволяя переписать текст.

Когда вы печатаете какой-то текст с возвратом каретки, текст до CR отображается как обычно, тогда курсор вывода возвращается к началу, а затем более поздние части строки печатаются поверх предыдущих частей. Вот почему « *.nc » появляется в начале строки в вашем сообщении, даже если « ${extn} » – last – mname заканчивается возвратом каретки.

Вы можете запускать текстовые файлы с помощью dos2unix чтобы удалить лишние байты возврата каретки. Вы также можете использовать ${vname%$'\r'} в сценарии, чтобы обрезать конечные CR, если вы не хотите или не можете изменять файлы.

  • Как я могу использовать строковые манипуляции для обнаружения и удаления двух разных частей строки?
  • Удалить ведущее 0 из определенного поля
  • Как заглавное слово (т.е. первое письмо в верхнем) в KornShell
  • Очистка эксплойтов PHP от зараженных файлов с помощью sed
  • Извлечение строки в соответствии с шаблоном в сценарии bash
  • Используйте «find» из определенного относительного каталога
  • Сравнение переменной с буквами верхнего и нижнего регистра
  • Сравнение нескольких строк в Bash
  • получить значение после определенного слова
  • Команда для удаления части данных JSON из каждой строки?
  • строковые подстановки: все вхождения
  • Как закодировать функцию чтения в Bash Script?
  • Interesting Posts

    Странное кодирование в Slackware

    * REAL * эквивалент zerofree для btrfs

    Можно ли использовать коды escape-кода ANSI в Bash здесь-документах?

    Как установить DB2 удаленно?

    Используйте curl для отправки двоичного файла через POST с помощью типа multipart / form-data;

    Как объединить эти два grep-регулярных выражения

    Как определить, нашли ли «найти» какие-либо совпадения?

    Какое место для системных служб, созданных системным администратором на Debian?

    итерации через файлы ('для файла в …), а также включить подкаталоги?

    Можно ли заставить члена группы запускать что-то, что разрешено только судьей, как он сам?

    команда не найдена, ручка не работает для URL-адреса

    Настройка статического ip для точки доступа с помощью connman

    Как определить, где расширился архив

    Что означает -fnoninteractive означает в вызове debconf-communication?

    Есть ли альтернатива использованию rbash для ограничения пользователя в моей системе?

    Linux и Unix - лучшая ОС в мире.