字符串替换模式匹配在bash脚本中不起作用

时间:2019-01-15 07:45:36

标签: linux bash

我正在尝试替换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

谢谢

1 个答案:

答案 0 :(得分:0)

您似乎正在使用扩展的全局表达式。默认情况下,不启用扩展的glob;您可以在.bashrc和/或.bash_profile中启用它们,但这并不影响脚本。在脚本的开头添加shopt -s extglob

顺便说一句,您也不需要在模式或替换中都转义.字符,但是(如@CostiCiudatu所指出的)您在脚本的替换中丢失了它。同样,双引号$ip但不对整个表达式加引号也没有多大意义。我建议这样做:

echo "${baseIp/%.+([0-9])/.$ip}"