Конкатенация строк в Баш - PullRequest
7 голосов
/ 04 марта 2010

У меня в скрипте bash:

for i in `seq 1 10`
do
   read AA BB CC <<< $(cat file1 |  grep DATA)
   echo ${i}
   echo ${CC}
   SORT=${CC}${i}
   echo ${SORT}
done

так что "i" - это целое число, а CC - строка типа "TODAY"

Я хотел бы получить тогда в SORT, "СЕГОДНЯ 1" и т. Д.

Но я получаю "1ODAY", "2ODAY" и так

Где ошибка?

Спасибо

Ответы [ 3 ]

7 голосов
/ 04 марта 2010

Вы должны попробовать

SORT="${CC}${i}"

Убедитесь, что ваш файл не содержит "\ r", который заканчивается только в конце $ CC.Это может хорошо объяснить, почему вы получаете «1ODAY».

Попробуйте включить | tr '\ r' '' после команды cat

1 голос
/ 04 марта 2010

ghostdog прав: с опцией -r read избегает потенциальных угроз, таких как CRLF Использование массивов делает параметр -r более приятным:

for i in `seq 1 10`
do
   read -ra line <<< $(cat file1 |  grep DATA)
   CC="${line[3]}"
   echo ${i}
   echo ${CC}
   SORT=${CC}${i}
   echo ${SORT}
done
1 голос
/ 04 марта 2010

1001 * попробовать *

   for i in {1..10}
    do
      while read -r line
      do
        case "$line" in
         *DATA* ) 
             set -- $line
             CC=$3
             SORT=${CC}${i}
             echo ${SORT}
        esac
      done <"file1" 
    done

В противном случае, показать пример file1 и желаемого результата

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