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

zsh中点号正则匹配失效,如何实现主机名域名后缀判断?

在Zsh中判断主机名是否包含域名后缀的正确方法

问题原因

你在Zsh中使用[[ "$1" =~ \. ]]时判断始终为真,是因为Zsh的正则匹配规则与Bash不同:未被引号包裹的.会被当作正则元字符(匹配任意单个字符),而非字面意义的点号。哪怕输入的主机名不带点,只要非空就会匹配成功。

解决方案

方案1:修正正则表达式匹配字面点号

将正则表达式用单引号包裹,确保.被当作字面字符匹配:

#!/bin/zsh
if [[ "$1" =~ '\.' ]]; then
  host="$1"
  echo "keep as $host"
else
  host="$1.mydomain.biz"
  echo "change to $host"
fi

也可以使用双反斜杠转义(Zsh会先解析一层转义,传递给正则引擎的是\.):

if [[ "$1" =~ \\. ]]; then
  # ... 逻辑不变
fi

方案2:使用Glob匹配更直观

对于简单的“是否包含点号”判断,无需使用正则,直接用Zsh的Glob匹配更简洁可靠:

#!/bin/zsh
if [[ "$1" == *.* ]]; then
  host="$1"
  echo "keep as $host"
else
  host="$1.mydomain.biz"
  echo "change to $host"
fi

这种方式直接判断字符串中是否存在任意位置的点号,逻辑清晰且不易出错,适合写入.zshrc中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:25:12