如果不接受带有多个方括号的语句,则为Bash

时间:2018-11-28 11:45:40

标签: bash

试图从ksh转换为bash。下面的行不断抛出错误

if [ (( ! -z $(echo $STR_CON | grep '^ *-.') )) || ( -z $STR_CON ) ] then
    print -u2 "no connect string"
fi

尝试将方括号更改为[[((,添加了;仍然低于错误。这里可能是什么错误?

syntax error near unexpected token `('

bash版本

GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

2 个答案:

答案 0 :(得分:0)

您可以在bash中将这些条件转换为此:

if [[ -z $STR_CON || $STR_CON =~ ^ *-. ]]; then
    print -u2 "no connect string"
fi

答案 1 :(得分:0)

OP不确定他要转换的代码的要求。 当它为空或其中包含上述字符之一时,可能不是连接字符串。 只是为了好玩:

sed -rn 's/^$|.*([\^ *-.]).*/no connect string/p ' <<< ${STR_CON}

一个正常的解决方案

grep -Eqv "^$|[\^ *-.]" <<< "${STR_CON}" || 
   { echo "no connect string";  echo "Perhaps return here"; }