我为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下运行)。
谢谢!
答案 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。
根据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]+$ ]]