[英]Concatenating string variable inside a for loop in the bash shell
我有一个文件config.ini,其中包含以下内容:
@ndbd
我想用其他文本替换@ndbd
来完成文件。 下面是我的bash脚本代码:
ip_ndbd=(108.166.104.204 108.166.105.47 108.166.56.241)
ip_temp=""
for ip in $ip_ndbd
do
ip_temp+="\n\[ndbd\]\nHostname=$ip\n"
done
perl -0777 -i -pe "s/\@ndbd/$ip_temp/" /var/lib/mysql-cluster/config.ini
基本上,我只想以特定格式获取所有IP地址,然后将@ndbd
替换为生成的子字符串。
但是,我的for循环似乎并没有连接$ip_ndbd
所有数据,只是列表中的第一项。
所以不要得到:
[ndbd]
HostName=108.166.104.204
[ndbd]
HostName=108.166.105.47
[ndbd]
HostName=108.166.56.241
我越来越:
[ndbd]
HostName=108.166.104.204
我很确定有更好的方式来写这个,但我不知道怎么做。
我很感激一些帮助。
提前致谢。
如果要迭代数组变量,则需要指定整个数组:
ip_ndbd=(108.166.104.204 108.166.105.47 108.166.56.241)
ip_temp=""
for ip in ${ip_ndbd[*]}
do
ip_temp+="\n\[ndbd\]\nHostname=$ip\n"
done
更换
ip_ndbd=(108.166.104.204 108.166.105.47 108.166.56.241)
同
ip_ndbd="108.166.104.204 108.166.105.47 108.166.56.241"
我没有看到你的文件使用内容@ndbd ...
这是你想要的吗?
kent$ echo "108.166.104.204 108.166.105.47 108.166.56.241"|awk '{for(i=1;i<=NF;i++){print "[ndbd]";print "HostName="$i;print ""}}'
[ndbd]
HostName=108.166.104.204
[ndbd]
HostName=108.166.105.47
[ndbd]
HostName=108.166.56.241
您可以通过> config.ini
将输出重定向到config.ini文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.