如何在纯Bash中匹配重复字符类以提取GNU Screen名称?
从$STY中提取Screen会话名称的Bash方法
要匹配开头零或多个数字并移除,你需要用到Bash的扩展模式匹配功能,对应Perl正则里*重复匹配的是*(pattern)语法。
具体实现
- 先确认Bash开启了扩展模式(默认通常已开启,若未开启可临时执行
shopt -s extglob) - 使用以下参数扩展语法:
session_name=${STY#*([0-9])}#表示从字符串开头匹配并移除最短匹配部分*([0-9])就是Bash里对应零或多个数字的模式,等价于Perl正则的[0-9]*
验证示例
假设STY=1234.my-screen-session,执行上述命令后:
echo $session_name # 输出 .my-screen-session
如果想连开头的.也一起去掉,可以调整为:
session_name=${STY#*([0-9]).}
这样输出就是my-screen-session。
无需扩展模式的替代方案
如果不想依赖extglob,也可以用sed处理:
session_name=$(echo "$STY" | sed 's/^[0-9]*\.//')
这个正则^[0-9]*\.会匹配开头所有数字加.,替换为空后直接得到会话名称。
内容的提问来源于stack exchange,提问作者Rovanion
相关产品推荐
相关产品推荐

