我正在尝试替换 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
谢谢
最佳答案
您似乎正在使用扩展的全局表达式。默认情况下不启用扩展全局变量;您可以在 .bashrc 和/或 .bash_profile 中启用它们,但这不会影响脚本。在脚本开头添加 shopt -s extglob
。
顺便说一句,您也不需要在模式或替换中转义 .
字符,但是(正如 @CostiCiudatu 指出的那样)您在脚本的替换中丢失了它。另外,双引号 $ip
但不加引号的整个表达式没有多大意义。我推荐这个:
echo "${baseIp/%.+([0-9])/.$ip}"
关于linux - 字符串替换模式匹配在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54194562/