Bash在variables中转换字符

我正在写bash中的collectd nagios自定义检查脚本。 我遇到的问题是,nagios显示主机名为host.name.domain,但collectd将WSP文件保存为host_name_domain。 我的问题是我如何使一个variables将它从nagios(host.name.domain)获取的主机名转换为collectd格式(host_name_domain)。

这是转换必须发生的部分。 所以WSP_PATH会在variables$ NHOST中给出主机名的collectd格式

WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp 

使用sed:

 $ NHOST="host.domain.tld" $ NHOST=$(echo $NHOST | sed 's/\./-/g') $ WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp $ echo $WSP_PATH /var/lib/carbin/whisper/ctd/host-domain/uptime/uptime.wsp 

如上所述,/ g是必需的,以便所有的实例。 被replace为 –

尽pipe在第二个想法上,对$ NHOSTvariables执行这个(sed)操作可能会更有意义(现在编辑来显示这个)

Bash具有内置的必要function(除非是古老的版本):

 WSP_PATH=/var/lib/carbon/whisper/ctd/${NHOST//./-}/uptime/uptime.wsp