regex - 当脚本文件来自 zsh 时,为什么 BASH_REMATCH 返回空?
问题描述
所以我为自己创建了一个可爱的小 bash 脚本:
#!/usr/bin/env bash
TEXT="FOO BAR"
REGEX="FOO (.+)"
if [[ $TEXT =~ $REGEX ]]; then
echo "Matched ${BASH_REMATCH[1]}"
else
echo "No match."
fi
很基本。如果我运行./cutescript.sh
,那么我会得到结果:
Matched BAR
但是,如果我获取脚本,. ./cutescript.sh
那么它仍然匹配,但是BASH_REMATCH[1
是空的。
笏。
我在 MacOS Catalina 10.15.7 (19H2) 上执行此操作zsh
,但使用bash
shebang。
任何人都可以解释这种违规行为吗?
解决方案
当你用 读取文件时.
,它会被你正在运行的任何 shell 执行——在这种情况下,你说你在 zsh 中。顾名思义BASH_REMATCH
,数组的名称是特定于bash
; 例如,如果你的 shell 是 zsh,那么在这种情况下匹配的文本会被找到$match[1]
。而且我认为 ksh 根本不会进行真正的正则表达式匹配。
推荐阅读
- html - 当 justify-content 设置为 space-between 时,Chrome 中的网格行高计算不正确,这是一个错误吗?
- javascript - 回形针默认 url 图像在 Rails 5 中不起作用
- php - 使用 htaccess 伪造目录中的扩展名
- php - Json 数组移到顶部
- javascript - 为什么我需要点击两次按钮才能在组件上设置道具?
- javascript - 如何在 RxJS 中选择性地发出热(共享)的 observables?
- square - 与多个客户网站一起使用
- opengl - OpenGL:线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)
- java - 如何使用 tor 浏览器作为 web 驱动程序 selenium?
- input - UWP输入事件中PointerDeviceType = Touch时的IsInContact是什么