【发布时间】:2020-10-19 14:45:30
【问题描述】:
所以我为自己创建了一个可爱的小 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 的扩展名的原因。如果你
. yourscript.bash,那就更清楚一点,它 only 意味着在 bash 中运行;而使用. yourscript.sh运行的东西通过名称进行通信,它旨在与所有 POSIX-y shell 兼容(顺便说一句,zsh 不是)。 -
...这与打算作为库加载的 Python 模块具有
.py扩展名的方式相同,但作为脚本运行的模块根本没有扩展名(您运行pip,而不是pip.py)。将东西作为库加载——就像source/.所做的那样——只有当这些东西是为你已经在运行的相同语言/解释器编写时才合适。 -
非常有意义!感谢您指出不同之处!
标签: regex bash zsh macos-catalina