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)
我写了这样一个脚本:
#!/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)