строки отсутствуют после конкатенирования двух или более переменных строк в 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, если вы не хотите или не можете изменять файлы.

  • Как утверждать, что строка имеет символ новой строки и, если это так, удалите ее
  • Bash часть строки без использования символов в кавычках
  • лучший способ найти подстроку целочисленного числа в perl
  • Остальные символы после сравнения двух строк
  • Нужна помощь в преобразовании строки из файла в дату
  • Индексировать строку в bash
  • Измените известные слова 1 и 3 строки, сохраняя неизменное слово 2 постоянным
  • Команда для удаления части данных JSON из каждой строки?
  • Печатать линию со смещением X в дампе памяти +/- 10 строк с каждой стороны
  • Как найти разницу в токенах в двух строках с помощью инструментов Unix?
  • Есть ли способ выполнить код в командной строке (PS1) без использования обратных ссылок?
  • Interesting Posts

    Конкирование инфобара влево и вправо

    Расширение строки расширения скобки, содержащейся в переменной для использования в цикле for?

    Файловая система-ACL (setfacl) Эквивалентна «mkdir -p» для рекурсивной обработки ACL

    Как вести историю команд с временными отметками, выводимыми на терминал непрерывно?

    В Mint 12 на HP Pavillion DV7 моя беспроводная сеть перестала работать

    Моя электронная почта сервера не может подключаться к Outlook или Thunderbird

    Почему execve и brk (NULL) всегда являются первыми двумя системными вызовами?

    Проблема ввода @ символа в командной строке под HP-UX

    Корневая файловая система vs файловая система раздела

    Обмен буфером обмена между ОС хоста и виртуальной консолью виртуального клиента VirtualBox

    Виртуальный eth-адаптер в конфигурации сети

    Безопасное удаление файла в Рам

    sysfs альтернатива / proc / acpi / button / lid / LID / state

    почему usb не работает с Centos 5, пока он работает с другими ОС

    Как показать значок приложения в контекстном меню «открыть с» для пользовательского mimetype в Linux Mint Cinnamon?

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