繁体   English   中英

在bash shell中的for循环中连接字符串变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM