SLES 12语法错误:'=〜'意外的运算符/操作数

时间:2017-12-06 13:29:37

标签: linux shell ksh

我为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
...
似乎不再支持{p> =~了!? 你可以给我帮助,如何替换SLES12的语法(并且还在SLES11下运行)。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

所以你需要安装真正的 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)。

答案 1 :(得分:-1)

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

试试这个:

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