当我运行两个 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
Run Code Online (Sandbox Code Playgroud)
在 varlists.txt 中
var1
var2
Run Code Online (Sandbox Code Playgroud)
在model_test1.txt
My_model1
My_model2
Run Code Online (Sandbox Code Playgroud)
执行脚本后,显示
Working on model - My_model1
and model number = 1
*.ncm_My_model1
*.ncm_My_model1
******************************************
Run Code Online (Sandbox Code Playgroud)
您的文本文件具有 Windows/DOS CRLF行尾。
字符串正确连接,但回车字节留在vname
and的末尾mname
,因为它不是 Unix 上的行结尾的一部分,因此没有被read
. 当您打印出字符串时,显示会被破坏。回车将光标移回行首(就像打字机一样),让文本被覆盖。
当您打印一些带有回车符的文本时,CR 之前的文本正常显示,然后输出光标移回开头,然后字符串的后面部分将打印在前面部分的顶部。这就是为什么“ *.nc
”出现在报告输出中的行首的原因,即使“ ${extn}
”是最后一个 -mname
以回车结束。
您可以运行文本文件dos2unix
以删除额外的回车字节。如果您不想或不能修改文件,也可以${vname%$'\r'}
在脚本中使用来截断尾随CR。