【问题标题】:getting sh: =~: unknown operand in shell scripting获取 sh: =~: shell 脚本中的未知操作数
【发布时间】:2018-05-24 12:05:58
【问题描述】:

我刚开始编写 shell 脚本,在 if 语句中使用 regex 时出现未知操作数错误。我搜索了谷歌,但没有得到任何东西

IP="172.21.1.1"
if [[ "$IP" =~ /d ]] ; then
echo "qqq"
fi

得到错误

sh: =~: unknown operand

Bash 版本为:BusyBox v1.19.3 (2012-01-31 08:57:52 PST) 内置 shell (ash)

【问题讨论】:

  • 看起来您正在尝试使用 sh 运行 Bash 脚本(但奇怪的是它没有抱怨 [[)。你如何运行它,shebang 是什么?
  • 我在 bash 终端上输入这些命令。没有shebang。我刚刚在终端上写了这些行并得到错误
  • 所以/bin/bash 是灰烬,我猜这就是问题的原因。看起来像一个不稳定的设置。 ??????
  • Busybox 不支持它包含的任何软件的“高级”功能,我相信您必须构建自己的 BB 版本才能包含真正的 bash。 @Nitesh ,您必须保持最少的外壳功能。阅读原始 Bourne shell 将向您展示可用的逻辑工具类型,它不包括 /d type reg-ex.,您必须将其指定为 [0-9] )。您可能会发现ash 的功能比sh 还要少。祝你好运。
  • @Nitesh:这可能很有用 - stackoverflow.com/questions/21010882/…

标签: shell


【解决方案1】:

这是因为运算符 =~ 不存在用于 bash。

如您所见,您正在尝试使用正则表达式来比较您的变量。我推荐使用expr 命令。这是一个例子:

IP="172.21.1.1"
if [[ $(expr match "$IP" 'my_regex') != 0 ]]; then echo "qqq"; fi;

【讨论】:

  • 这对我有用!这个expr 命令返回匹配字母的数量,因此它可以让您构建更复杂的条件。
  • bash 确实有=~ 运算符(从version 3.0-alpha 开始);这里的问题是 shell 实际上不是 bash,它是 ash。
  • 这修复了我的脚本。谢谢大佬。
猜你喜欢
  • 2022-01-07
  • 2022-01-17
  • 2022-12-18
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多