shell脚本不在本地运行

时间:2016-12-10 17:17:05

标签: bash shell

我有一个在线工作的shell脚本here,但不能在终端本地工作。可能的原因是什么?我该如何调试?

#!/bin/bash

string='internal func add() -> Int'

sed -e '
s/^.*func \+//
s/ *\->.*$//
s/:[^,)]\+/:/g
s/[, ]//g
' <<< "$string"

echo $SHELL

对于shell脚本中存在的输入,我在本地计算机上获取internalfuncadd(),而不是add() - 这是我上网的正确输出。

1 个答案:

答案 0 :(得分:3)

您的问题是您正在使用BSD sed(与Mac OS X一起使用)而不是GNU sed(通常在Linux上找到)。 BSD sed不支持GNU sed的某些功能,包括基本正则表达式中的\+。您可以使用\{1,\}

#!/bin/bash

string='internal func add() -> Int'

sed -e '
s/^.*func \{1,\}//
s/ *\->.*$//
s/:[^,)]\{1,\}/:/g
s/[, ]//g
' <<< "$string"

...或者使用-E切换到扩展的正则表达式,尽管这需要使用该语法编写正则表达式。 (在此特定情况下,所需的更改是使用+而不是\+; \+表示扩展语法中的文字+