在bash中连接字符串

7

我在一个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中得到"TODAY1"等等

但我得到了"1ODAY"、"2ODAY"等等

错误出在哪里?

谢谢


命令 for i in \seq 1 10` ; do echo HELLO$i ; done` 输出 HELLO1 HELLO2 ... 可能问题出在 file1 文件中。 - mouviciel
1
请展示您的输入文件1和期望的输出内容的示例。 - ghostdog74
3个回答

7

你应该尝试

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

请确保您的文件中不包含"\r",因为这可能会导致$CC的结尾不正确,这也可以解释为什么会出现"1ODAY"。

在cat命令后尝试包含|tr '\r' ''


1
你的文件可能使用\r\n作为换行符,而read函数只能识别\n作为换行符。因此,\r会出现在CC变量中...你应该将它删除。 - tonio
+1遇到了一个相关的问题,即如何将curl header读入变量中。 - cmbuckley

1

尝试

   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的一个例子和您期望的输出。

1

ghostdog是正确的:使用-r选项,read避免了潜在的恐怖,如CRLFs。使用数组使-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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接