Bash脚本数组转换为csv

4

我希望将我的数组转换为逗号分隔的字符串。在我的脚本中,我将数据收集到数组outputArr中,然后我想要使用echo来检查它,但现在我卡住了。我想要使用以下代码将其打印到控制台:

echo ${outputArr[*]}

但是我得到了错误的输出。因此,我正在尝试调试并像这样编写它:

echo ${outputArr[0]}
echo ${outputArr[1]}
echo ${outputArr[*]}
echo "-------------"

好的,这是我的输出结果:

Terminally Yours
2204
 2204nally Yours
-------------

还有其他例子:

Alfa
1491
 1491
-------------

为什么开头会被空格覆盖?当然我的目标是(最终):
Alfa;1491

在这个点上:
Alfa1491

编辑:

while read -r line
do
    singleLine=$line
    if [[ $singleLine =~ $regexVenueName ]]
    then
        singleLine=${singleLine/<span id=\"ctl00_MainContent_lbPartner\" class=\"Partner\">/}
        singleLine=${singleLine/<\/span> <br \/><br \/>/}
        partnerVenueNameOutput+="$singleLine"
        outputArr[0]=$singleLine
    fi
done < "$f"

你尝试过引用你的变量吗?echo "${outputArr[0]}" - fedorqui
1
你的数组元素以回车符结束,可能是因为你从带有DOS行结尾的文件中读取或捕获了使用回车符的命令输出。 - chepner
@fedorqui - 是的,没用。 - Jakub
@chepner - 或许...我该如何移除它? - Jakub
2个回答

4

您的数组包含带回车符的元素:

$ foo=($'\rterminally yours' $'\r2204')
$ echo "${foo[0]}"
terminally yours
$ echo "${foo[1]}"
2204
$ echo "${foo[*]}"
2204inally yours 

对于您的代码,您可以添加以下内容以从变量中删除回车符:

singleLine=${singleLine//$'\r'/}

1
可能是这个问题。我该如何移除它?我从使用wget下载的HTML文件中逐行读取我的文件。我更新了我的答案并添加了一些代码。 - Jakub

2
为了从每个数组元素中去除任何尾随回车符,请尝试:
outputArray=( "${outputArray[@]%$'\r'}" )

然而,更好的做法可能是检查首次设置outputArray的方式,并在首次添加回车符之前防止其添加。如果您正在读取使用DOS行结尾的文件,请尝试先使用dos2unix进行“清理”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接