【发布时间】:2017-05-14 11:01:27
【问题描述】:
我需要将一个文件读入一个数组并在每行的末尾连接一个字符串。这是我的 bash 脚本:
#!/bin/bash
IFS=$'\n' read -d '' -r -a lines < ./file.list
for i in "${lines[@]}"
do
tmp="$i"
tmp="${tmp}stuff"
echo "$tmp"
done
但是,当我这样做时,会发生replace 的操作,而不是串联。
例如,在file.list 中,我们有:
http://www.example1.com
http://www.example2.com
我需要的是:
http://www.example1.comstuff
http://www.example2.comstuff
但是在执行上面的脚本之后,我在终端上得到如下的东西:
stuff//www.example1.com
stuff//www.example2.com
顺便说一句,我的电脑是 Mac OS。
通过awk、printf 和echo 命令连接字符串时也会出现此问题。例如echo $tmp"stuff" 或echo "${tmp}""stuff"
【问题讨论】:
-
我检查了你的代码似乎没问题,并发现如预期的那样
http://www.example1.comstuff http://www.example2.comstuff -
可能是因为我的电脑是Mac?
-
无法重现,你的代码给我
http://www.example1.comstuff http://www.example2.comstuff -
我已经在 Mac 和 Vagrant box (Ubuntu 16.04) 中测试过
-
@Yves 一个标题不佳的问题,带有误导性的公认答案,对社区几乎没有帮助。这有可能是有价值的。也许您至少应该将问题重命名为人们可能会搜索的内容,并选择一个比不直接解决核心问题但更多可能解决方法的答案更可靠。
标签: linux windows bash macos string-concatenation