将 bash =~ 运算符更改为 sh 兼容参数
Changing the bash =~ operator to a sh compatible argument
所以我是 运行 核心 os 中的一个 bash 脚本,因此我没有 /bin/bash 但是我有 /bin/sh。现在 sh 一直很好,直到我使用别人的 bash 脚本并且他们有以下行。
if [[ "$file" =~ ^https?:// ]]; then
和我的 os 抱怨 sh: =~: unknown operand
现在我假设这意味着 ~=
运算符与 sh 不兼容但是必须有一些其他的方式来做这个表格看起来所以我发现 ~=
是某种正则表达式运算符。我的问题是,我可以用一些东西替换 ~=
吗?注意:我的机器上有 grep。
您可以将其重写为 case
命令:
case "$file" in
http://* | https://* )
# ...
;;
esac
您可以调用 expr
进行基本正则表达式匹配:
if expr match "$file" 'https\?://'; then
模式隐式锚定到字符串的开头。
I have grep
on my machine
按照上面的行,您可以使用 if 语句编写一个简单的条件,如
if echo "$file" | grep -Eq "^https?://"; then
printf 'regex matches\n'
fi
grep
中的正则表达式匹配使用 ERE(扩展正则表达式),它在您安装的任何 POSIX compliant grep
中都可用。 -q
仅抑制打印的正常标准输出,但仅 returns 退出代码以了解匹配是否成功。
即使你有的grep
的某些包不允许-E
,只使用基本的正则表达式支持,但剥夺?
的特殊值并传递它字面上
if echo "$file" | grep -q "^https\?://"; then
所以我是 运行 核心 os 中的一个 bash 脚本,因此我没有 /bin/bash 但是我有 /bin/sh。现在 sh 一直很好,直到我使用别人的 bash 脚本并且他们有以下行。
if [[ "$file" =~ ^https?:// ]]; then
和我的 os 抱怨 sh: =~: unknown operand
现在我假设这意味着 ~=
运算符与 sh 不兼容但是必须有一些其他的方式来做这个表格看起来所以我发现 ~=
是某种正则表达式运算符。我的问题是,我可以用一些东西替换 ~=
吗?注意:我的机器上有 grep。
您可以将其重写为 case
命令:
case "$file" in
http://* | https://* )
# ...
;;
esac
您可以调用 expr
进行基本正则表达式匹配:
if expr match "$file" 'https\?://'; then
模式隐式锚定到字符串的开头。
I have
grep
on my machine
按照上面的行,您可以使用 if 语句编写一个简单的条件,如
if echo "$file" | grep -Eq "^https?://"; then
printf 'regex matches\n'
fi
grep
中的正则表达式匹配使用 ERE(扩展正则表达式),它在您安装的任何 POSIX compliant grep
中都可用。 -q
仅抑制打印的正常标准输出,但仅 returns 退出代码以了解匹配是否成功。
即使你有的grep
的某些包不允许-E
,只使用基本的正则表达式支持,但剥夺?
的特殊值并传递它字面上
if echo "$file" | grep -q "^https\?://"; then