我是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,所以我猜它不是版本问题,但我对于将要发生的事情感到有点失落。
由于您的脚本以:
#!/bin/sh
它将运行系统shell,它可能是一个完全不同的shell,如dash
,或者在兼容模式下最好是bash
。你应该使用:
#!/bin/bash
使用具有所有功能的bash。
同样,如果使用sh file
运行,则覆盖shebang并强制脚本与系统shell一起运行。使用./file
,以便脚本可以使用其声明的shebang运行。