【问题标题】:SLES 12 syntax error: '=~' unexpected operator/operandSLES 12 语法错误:'=~' 意外的运算符/操作数
【发布时间】:2017-12-06 13:29:37
【问题描述】:

我为 SLES11 开发了一个更大的脚本,一切运行良好。 但使用 SLES12 时,启动脚本时会出现一些语法错误。

错误:syntax error: '=~' unexpected operator/operand

#!/bin/ksh

while [[ ! $BIGTAB =~ ^-?[0-9* ]+$ ]] || [[ ! $BIGTAB -ge 1 ]]; do
echo "  Enter number of tables to display:"
read BIGTAB
...

=~ 好像不再支持了!? 你能给我帮助吗,如何替换 SLES12 的语法(并且仍然在 SLES11 下运行)。

谢谢!

【问题讨论】:

  • 检查 SLES 12 上的 ksh 版本。
  • SLES11:版本 AJM 93u+ 2012-08-01 SLES12:旧版 KSH R50 2015/04/19 SLES
  • 如果您无法为 SLES12 获得 ksh93,我建议切换到 bash——虽然语法并不总是相同,但现代版本的功能非常完整,甚至提供了更多功能晦涩的功能,例如名称变量。 (浮点数学仍然缺失,但这很容易解决)。

标签: linux shell ksh


【解决方案1】:

您在 SLES 12 上使用 legacy ksh(基于 mksh):

# echo $KSH_VERSION
@(#)LEGACY KSH R54 2016/11/11
# [[ a =~ a ]]
ksh: syntax error: '=~' unexpected operator/operand
#

所以您需要安装 real ksh/ksh93(但不确定 SLES 上的 pkg 名称是什么)。

# echo $KSH_VERSION
Version AJM 93u+ 2012-08-01
# [[ a =~ a ]]
#

更新:

刚刚查看了 SUSE 的网站,SLES 11 中有 ksh(并且没有 mksh),但 SLES 12 中只有 mksh。

更新 #2:

根据SLES 12 SP1 release notes,需要安装legacy module才能取回ksh。

1.4.1.3 对 Korn Shell (ksh) 的支持延长至 2022 年 3 月底

SLE 中对旧包 ksh 的支持原定于 2017 年结束。但是,许多客户仍然依赖 ksh。

对 ksh 的支持已延长至 2022 年 3 月。

在此之后,您可以使用 Korn Shell 的 mksh 实现(包 mksh)。但是,由于 mksh 是基于 pdksh 的,因此存在一定的功能差异。例如,它对管道的处理类似于 Bash。

8.2.5 KSH 93v 替换为 KSH 93u 报告

在 SUSE Linux Enterprise 12 的旧版模块中,我们发布了 KSH 93v。但是,93v 分支还没有完全稳定。

在 SLE 12 SP1 中,我们发布了 KSH 93u,它是更稳定的 93v 版本。为了提供从 93v 到 93u 的定期更新路径,本次更新使用了更高的版本号 (93vu)。

【讨论】:

  • 几个月前遇到了同样的问题(SLES 12 放弃了 ksh93 的 spt);有很多关于断开链接和缺少库的问题,我说 fuqit 并从RPM resource for ksh93 安装了ksh-93vu-13.1.x86_64.rpm,更新了/bin/usr/bin 中的链接并且没有回头;也许最新/最棒的补丁(SLES 12)最终会起作用......耸耸肩
【解决方案2】:

我没有 SLES12 来测试它,但您的问题似乎不是 =~ 运算符,而是您的操作数(正则表达式中间有一个空格)。

试试这个:

[[ ! $BIGTAB =~ ^-?[0-9]+$ ]]

【讨论】:

  • 嗨,“*”和“空格”在那里,因为应该也可以输入这些字符(而不是数字)。它是一个特殊的输入字段 :-) 错误仍然发生......
  • [[ ]] 有自己的解析规则,所以这个值不会像其他情况那样被拆分为子字符串(当空格是字符类定义的一部分时)。跨度>
  • 也就是说——如果你手边有真正的 ksh93(例如,它随 MacOS 一起提供),以下不会提供任何语法错误:ksh -c ' [[ ! $BIGTAB =~ ^-?[0-9* ]+$ ]] '
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
相关资源
最近更新 更多