shell:奇怪的字符串连接行为

shell: strange string concatenation behavior

我写了这样一个脚本:

#!/bin/bash
while read line
do
  echo line ${line}
  pdbfile=${line}.pdb  
  echo pdbfile ${pdbfile}
done < myfile

结果是:

line pdb8mhtA
.pdbfile pdb8mhtA

虽然它应该是

line pdb8mhtA
pdbfile pdb8mhtA.pdb

这是怎么回事?为什么字符串连接不起作用?为什么行首有奇怪的点?
我替换为 pdbfile=${line}'.pdb'。这不会改变结果。

我试过你的脚本,对我来说效果很好:

./testConcat
line pdb8mhtA
pdbfile pdb8mhtA.pdb

顺便说一句,您可以尝试 "preserve" “.”

while read line
do
  echo line ${line}
  pdbfile=${line}\.pdb
  echo pdbfile ${pdbfile}
done < myfile

如你所见,结果是一样的

./testConcat
line pdb8mhtA
pdbfile pdb8mhtA.pdb

"string goes to the beginning of the line" 是 $line 中的回车 return 的症状,您可以通过许多其他方式将 tr 管道删除到您的文件:

while IFS= read -r line
do
  echo "line ${line}"
  pdbfile=${line}.pdb  
  echo "pdbfile ${pdbfile}"
done < <(tr -d '\r' <file)