gpt4 book ai didi

regex - 为什么这个 shell 脚本不能工作?

转载 作者:行者123 更新时间:2023-11-29 09:50:48 25 4
gpt4 key购买 nike

我的脚本是这样的:

#!/bin/env bash

monitor_sock_raw1=socket,id=hmqmondev,port=55919,host=127.0.0.1,nodelay,server,nowait

msock=${monitor_sock_raw1##,port=}
msock=${msock%%,host=}

echo $msock

我希望得到“55919”,但结果是:

socket,id=hmqmondev,port=55919,host=127.0.0.1,nodelay,server,nowait

为什么以及如何修复此错误?

最佳答案

对于像这样的简单需求,bash 支持使用 ~ 运算符的 regex(参见 bash ERE support)方法,您可以使用它匹配 port 字符串并匹配它后面的数字。

#!/bin/env bash

var='monitor_sock_raw1=socket,id=hmqmondev,port=55919,host=127.0.0.1,nodelay'

if [[ $var =~ ^.*port=([[:digit:]]+).*$ ]]; then
printf "%s\n" "${BASH_REMATCH[1]}"
fi

从正则表达式中捕获的组存储在数组 BASH_REMATCH 中,索引 0 之后的第一个元素即索引 1 包含值第 1st 个捕获组。

RegEx Demo

关于regex - 为什么这个 shell 脚本不能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46149454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com