在bash中使用=〜运算符的语法错误

时间:2014-08-23 05:14:16

标签: regex bash

我是bash的新手,我正在尝试根据模式提取字符串的一部分,但是当我执行代码时,我看到错误。

示例代码:

#!/bin/sh

STRING="LAX-8912_Words_Are_Here";

if [[ $STRING =~ LAX-(\d)+ ]]; then
    echo "${BASH_REMATCH[1]}"
fi

所以从上面的代码中,我想要提取字符串的“LAX-8912”部分。基本上字符串将是LAX-然后一系列数字,可以是任何长度。但是,当代码被执行时,我收到了这条消息:

Syntax error: "(" unexpected (expecting "then")

我也尝试将正则表达式存储在这样的变量中:

#!/bin/sh

STRING="LAX-8912_Words_Are_Here";
REX="LAX-(\d)+";

if [[ $STRING =~ $REX ]]; then
    echo "${BASH_REMATCH[1]}"
fi

但后来我收到了这个错误:

 [[: not found

我的bash版本是4.2.25,所以我猜它不是版本问题,但我对于发生的事情感到有点失落。

1 个答案:

答案 0 :(得分:2)

由于您的脚本以:

开头
#!/bin/sh

它将运行系统shell,它可能是完全不同的shell,如dash,或者在兼容模式下最好是bash。你应该使用:

#!/bin/bash

使用bash及其所有功能。

同样,如果使用sh file运行,则覆盖shebang并强制脚本与系统shell一起运行。使用./file以便脚本可以使用其声明的shebang运行。