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

标签 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

谢谢

最佳答案

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

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

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

关于linux - 字符串替换模式匹配在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54194562/

相关文章:

linux - 用户空间中的 tproxy 实现

bash - 在命令行上解析 shell 脚本的输入

C++ getenv 不更新

linux - 如何使用case语句调用函数?

c - 错误 : initializer element is not constant in assigning structure pointers

c - x86_64中中断的开销是多少

linux - 在 Ubuntu 中执行 START-DFS.SH 时权限被拒绝

c - C中的暂停功能不响应回车键

linux - 未找到 Ansible 内部脚本命令

linux - 在bash中使用sed写入变量指定的行号