Ksh语法错误'=〜'

时间:2015-02-18 05:19:37

标签: bash shell ksh

read -p "The Process running for "$days" days continuously OK to kill this     process (y/N)? " -u 4 ok
     [[ "${ok}" =~ y ]] || continue
        echo "Killing $pid"
      kill -HUP "$pid"
        fi 

这是我的脚本的片段,当我执行它时,它显示为

 `=~' is not expected.

如何解决?

2 个答案:

答案 0 :(得分:1)

我猜你的shebang行有#!/bin/sh,所以你无法访问完整的ksh语法。如果你这样做,ksh93似乎确实支持[[ string =~ regex ]]语法,那么这里的某些内容并没有正确添加。

无论哪种方式,都有一个结构可以在经典的Bourne shell中使用,您可以使用它,还有额外的好处,即您的脚本将与ksh不可用的系统兼容。

你使用read -p <prompt>但这是一个Bashism; -p的{​​{1}}选项在read中具有完全不同的含义。

ksh93

您的代码在输入中的任何位置查找printf 'Process ran for %i days continuously, OK to kill this? ' "$days" read -u 4 ok case $ok in [Yy]* ) ;; *) continue ;; esac echo "Killing $pid" kill -HUP "$pid" ,但我将其限制为仅检查第一个字符。

(你的代码有不稳定的缩进和我未省略的未成对y。)

答案 1 :(得分:0)

你的?是如何解决&#39; - tripleee的建议看起来像一个解决方案 - 简化代码 - 尝试:

if [[ "${ok} == "y" ]] 

我尝试复制您的代码段,但我得到了一个不同的错误。 D&amp; C的时间 - 简单的ksh93脚本测试&#39; =〜&#39;