2010-03-04 257 views
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 

所以“我”是一个整数,CC就像是“今天”的字符串

我想得那么SORT “目前1” 等

,但我得到 “1ODAY”, “2ODAY” 等

哪里错误?

感谢

+0

命令'for i in \'seq 1 10 \';确实回应HELLO $ i; done'给HELLO1 HELLO2 ...问题可能在文件1 – mouviciel 2010-03-04 13:28:48

+1

展示你的输入文件1,和您所需的输出内容的例子。 – ghostdog74 2010-03-04 13:30:03

回答

7

你应该尝试

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

确保您的文件不包含 “\ R” 将结束只是$ CC的结束。 这可以很好地解释你为什么得到“十一”。

尝试包括 | TR '\ r' '' cat命令后

+0

同样的问题已经 – flow 2010-03-04 13:29:12

+1

您的文件可能有\ r \ n留置权的结局,和阅读理解只\ n。所以\ r以CC变量结束......你应该删除它。 感谢 – tonio 2010-03-04 13:35:18

+0

TR -d“\ r”做的工作有一个相关的问题读卷曲头到一个变量 – flow 2010-03-04 14:01:39

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 

否则,显示文件1的例子,你需要的输出

+0

感谢。你的想法很好 – flow 2010-03-04 13:50:57

1

ghostdog是正确的:使用-r选项,可以避免陷入潜在的恐惧,如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