我正在尝试替换ip地址的主机地址。我在bash命令行窗口中尝试如下操作,效果很好:
$ baseIp="10.215.5.16"
$ ip=18
$ echo ${baseIp/%\.+([0-9])/\."$ip"}
但是当我以打击方式编写bash脚本时,它不起作用:
#!/bin/bash
baseIp="10.215.5.16"
ip=18
currIp=${baseIp/%\.+([0-9])/\."$ip"}
echo $currIp
它打印:
$ ./test.sh
10.215.5.16
谢谢
答案 0 :(得分:0)
您似乎正在使用扩展的全局表达式。默认情况下,不启用扩展的glob;您可以在.bashrc和/或.bash_profile中启用它们,但这并不影响脚本。在脚本的开头添加shopt -s extglob
。
顺便说一句,您也不需要在模式或替换中都转义.
字符,但是(如@CostiCiudatu所指出的)您在脚本的替换中丢失了它。同样,双引号$ip
但不对整个表达式加引号也没有多大意义。我建议这样做:
echo "${baseIp/%.+([0-9])/.$ip}"