Linux 在bash shell中的for循环内串联字符串变量

Linux 在bash shell中的for循环内串联字符串变量,linux,bash,shell,Linux,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/" /

我有一个包含以下内容的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\u 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 
我很确定有更好的方法写这个,但我不知道怎么写

我非常感谢你的帮助


提前感谢。

我没有看到您的文件在content@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
kent$echo“108.166.104.204 108.166.105.47 108.166.56.241”{for(i=1;i替换

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)

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_temp=""
for ip in ${ip_ndbd[*]}
do
    ip_temp+="\n\[ndbd\]\nHostname=$ip\n"   
done