使用bash对带有变量的字符串进行concat时,无法获得正确的输出
我有一个简单的脚本,可以通过添加一些额外的字符串逐行读取输入文件的内容。这里有一个例子 输入文件:input.txt使用bash对带有变量的字符串进行concat时,无法获得正确的输出,bash,Bash,我有一个简单的脚本,可以通过添加一些额外的字符串逐行读取输入文件的内容。这里有一个例子 输入文件:input.txt 此input.txt的内容 aaaaaa bbbbbb cccccc dddddd eeeeee 读取文件的代码 while IFS='' read -r line || [[ -n "$line" ]]; do echo "abc.def.hig.ewe.adg.hea.L_${line}.great" done < "$1" 而IFS=''读
此input.txt的内容
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
读取文件的代码
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "abc.def.hig.ewe.adg.hea.L_${line}.great"
done < "$1"
而IFS=''读取-r行| |[[-n“$line”];做
echo“abc.def.hig.ewe.adg.hea.L_${line}.很棒”
完成<“$1”
我不确定到底哪里错了;我无法获得正确的输出。看起来,当您在变量末尾添加
.great
时,输出将打乱序列。您是否考虑过使用类似awk的方法?这对于这些类型的简单任务非常有用
$ cat input.txt
aaaa
bbbb
cccc
-
将评论转换为答案
你得到了什么输出?你期望什么样的产出?我有五行类似于:
abc.def.hig.ewe.adg.hea.L_aaaaaa.great
使用Bash3.2.57和Bash4.3(在MacOSX10.11.5上)
数据文件是否来自Windows或其他使用CRLF行结尾的源?这将使事情看起来像:
.greatf.hig.ewe.adg.hea.L_aaaaaa
而不是我之前展示的。而且,我注意到,如果你只展示了你得到的输出,这很容易解释(或打折)
是的,你说得对。问题是输入文件。从Windows上载到Unix时,它已损坏
你得到了什么输出?你期望什么样的产出?使用bash3.2.57和bash4.3,我得到了五行类似于abc.def.hig.ewe.adg.hea.L_uuaaaa.great的代码。数据文件是来自Windows还是其他使用CRLF行结尾的源?这将使事情看起来像:
.greatf.hig.ewe.adg.hea.L_uuuaaaa
而不是我之前展示的那样。而且,我注意到,如果你只展示了你得到的产出,这很容易解释(或打折)。是的,你是对的。问题是输入文件。从windows上载到unix时,它已损坏。真是个错误。谢谢,谢谢,维克多。实际上我的问题是sed-i。我想根据行号替换文件内容。这里有一个例子:sed-i“30s | ^.$| abc.def.acb.wet.hee.L|${line}.standard |”post_req.xml然而输出总是混乱,标准总是毫无理由地跳到行的开头。
.greatf.hig.ewe.adg.hea.L_aaaaaa