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

问题描述 投票:1回答:1

我是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,所以我猜它不是版本问题,但我对于将要发生的事情感到有点失落。

regex bash
1个回答
2
投票

由于您的脚本以:

#!/bin/sh

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

#!/bin/bash

使用具有所有功能的bash。

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

© www.soinside.com 2019 - 2024. All rights reserved.