String Bash/Shell脚本在读取文件时将while循环中的字符串与字段参数连接起来

String Bash/Shell脚本在读取文件时将while循环中的字符串与字段参数连接起来,string,bash,loops,file,String,Bash,Loops,File,我很难正确地读取一个只不过是key=value文件的文件 这是文件: #test.txt global.project=99999 global.env=pr global.app=Terraform global.dcs=CloudBroker global.cbp=n/a 代码如下: TS=“” 而IFS==read-rf1f2;做 echo$f1 echo$f2 val=$f2 TS+=“\”${f1}\”:\“${f2}\”,“ 完成

我很难正确地读取一个只不过是key=value文件的文件

这是文件:

#test.txt

global.project=99999 
global.env=pr
global.app=Terraform
global.dcs=CloudBroker
global.cbp=n/a

代码如下:

TS=“”
而IFS==read-rf1f2;做
echo$f1
echo$f2
val=$f2
TS+=“\”${f1}\”:\“${f2}\”,“
完成<“tags.txt”
echo“${TS}”#Result:,“global.cbp:“n/audBroker”
结果很奇怪。当我删除f2时,则不会出现任何问题

预期结果应该是:


“global.opco”:“99999”,“global.env”:“pr”等等。

根据@GordonDavisson的评论,我修改了脚本,现在它就像一个符咒一样工作:


TS=“”
而IFS=$'=\r'读取-r f1 f2;做
echo$f1
echo$f2
val=$f2
TS+=“\”${f1}\”:\“${f2}\”,“
完成<“tags.txt”
echo“${TS}”#结果:{“global.project”:“99999”,“global.env”:“pr”,“global.app”:“Terraform”,“global.dcs”:“CloudBroker”,“global.cbp”:“n/a”,}

根据@GordonDavisson的评论,我修改了脚本,现在它就像一个符咒:


TS=“”
而IFS=$'=\r'读取-r f1 f2;做
echo$f1
echo$f2
val=$f2
TS+=“\”${f1}\”:\“${f2}\”,“
完成<“tags.txt”
echo“${TS}”#结果:{“global.project”:“99999”,“global.env”:“pr”,“global.app”:“Terraform”,“global.dcs”:“CloudBroker”,“global.cbp”:“n/a”,}
只是一个正则表达式:

sed 's/\(.*\)=\(.*\)\r\?/"\1":"\2"/' tags.txt | paste -sd,
#                                                        ^ merge lines with comma
#                        ^  ^^^  ^     add some characters
# put  ^^^^^^             ^^           <- here
# put          ^^^^^^          ^^      <- here
sed's/\(.*\)=\(.*\)\r\?/“\1”:“\2”/“tags.txt”| paste-sd,
#^用逗号合并行
#^^^^^^添加一些字符
#把^^^^^放在一个正则表达式上:

sed 's/\(.*\)=\(.*\)\r\?/"\1":"\2"/' tags.txt | paste -sd,
#                                                        ^ merge lines with comma
#                        ^  ^^^  ^     add some characters
# put  ^^^^^^             ^^           <- here
# put          ^^^^^^          ^^      <- here
sed's/\(.*\)=\(.*\)\r\?/“\1”:“\2”/“tags.txt”| paste-sd,
#^用逗号合并行
#^^^^^^添加一些字符

#放置^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^,它被视为f2的一部分。看见在您的情况下,您可以通过稍微更改
read
命令来修剪它:
,而IFS=$'=\r'read-rf1f2;do
。我认为您的文件有DOS行结尾,请使用
dos2unix
修复,然后再试一次。test.txt文件是DOS/Windows格式,每行结尾都有一个非打印回车字符(除了unix程序期望的换行符),并且它被视为
f2
的一部分。看见在您的情况下,您可以通过稍微更改
read
命令来修剪它:
,而IFS=$'=\r'read-rf1f2;执行