You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从包含--listen-addr参数的命令串中提取IP地址与端口号

实现方案

修改思路:把地址后的:加端口的部分标记为可选匹配组,未匹配时对应捕获组内容自动为空即可。

完整可运行代码:

# 示例1:带端口的输入
ORI_STR="connect single-cluster --listen-addr=127.0.0.1:12345 --filename=hello"
# 示例2:不带端口的输入,注释掉上面一行放开下面一行即可测试
# ORI_STR="connect single-cluster --listen-addr=127.0.0.1 --filename=hello"

# 修改后的正则:将:端口部分设为可选匹配
LISTEN_ADDR_REGEX="(^|[[:space:]])--listen-addr=([^[:space:]:]+)(:([^[:space:]]+))?($|[[:space:]])"

if [[ $ORI_STR =~ $LISTEN_ADDR_REGEX ]]; then
    ADDR=${BASH_REMATCH[2]}
    PORT=${BASH_REMATCH[4]:-}  # 未匹配到端口时默认赋值为空
fi

echo "ADDR=$ADDR"
echo "PORT=$PORT"

运行效果

  • 带端口输入的输出:
ADDR=127.0.0.1
PORT=12345
  • 不带端口输入的输出:
ADDR=127.0.0.1
PORT=

正则修改说明

  1. 把原来的([^[:space:]]+):([^[:space:]]+)拆分为([^[:space:]:]+)(:([^[:space:]]+))?
  2. [^[:space:]:]+匹配地址部分,排除了冒号,避免把端口内容误算进地址
  3. (:([^[:space:]]+))?整个分组加?标记为可选,仅当存在冒号加端口时才会匹配,对应第4个捕获组为端口值
  4. 用${BASH_REMATCH[4]:-}的参数展开语法,保证未匹配到端口时变量为空,不会出现未定义报错

内容的提问来源于stack exchange,提问作者IsaIkari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:18:01