当我运行两个 while 循环并尝试连接两个变量字符串(来自两个循环)时,最终输出(字符串)很奇怪。我尝试了不同的连接方式,但没有得到答案:下面是代码:[我需要vfile="var1_Amon_My_model1*.nc"
]
#!/bin/bash
jcount=1
extn="*.nc"
while read line
do
mname=$line
echo " Working on model - " $mname
echo " and model number = "$jcount
while read line
do
vname=$line
vfile="${vname}""_Anom_""${mname}""${extn}"
echo $vfile
done<varlists.txt
echo "******************************************"
jcount=$((jcount+1))
done<model_test1.txt
在 varlists.txt 中
var1
var2
在 model_test1.txt 中
My_model1
My_model2
执行脚本后显示
Working on model - My_model1
and model number = 1
*.ncm_My_model1
*.ncm_My_model1
******************************************
答案1
您的文本文件有 Windows/DOS CRLF行结尾。
字符串连接正确,但回车字节留在vname
和的末尾mname
,因为它不是 Unix 上结尾的行的一部分,因此没有被 用完read
。当你打印字符串时,展示而是被破坏了。回车将光标移回行首(就像打字机一样),让文本被覆盖。
当您打印一些带有回车符的文本时,直到 CR 的文本将正常显示,然后输出光标移回到开头,然后字符串的后面部分将打印在前面部分的顶部。这就是为什么“ *.nc
”出现在报告输出中行的开头,即使“ ${extn}
”是最后一个 -mname
以回车符结尾。
您可以运行文本文件以dos2unix
删除多余的回车符字节。您还可以${vname%$'\r'}
在脚本中使用截短尾随CR如果您不想或无法修改文件。