函数内部 sed 命令中的 bash 语法错误,在命令行上工作正常
Posted
技术标签:
【中文标题】函数内部 sed 命令中的 bash 语法错误,在命令行上工作正常【英文标题】:bash syntax error in sed command inside function, works fine on command line 【发布时间】:2013-11-21 00:35:20 【问题描述】:我有一个带有两个函数的 bash 脚本,一个是包含一个 case 命令的 main 函数,该 case 命令将调用第二个函数并传递一个特定的参数。
在第二个函数中,我有一个在命令行上运行的命令,但是当作为 bash 脚本的一部分运行时,我收到以下错误:
: line 57: syntax error near unexpected token `('
: line 57: ` local DATE=`echo $URL|sed -r 's/.*____([0-9]1,2)_([0-9]1,2)_([0-9]1,2).*/20\3-\1-\2/;s/-([0-9]1)-/-0\1-/;s/-([0-9]1)$/-0\1/'`'
函数是,
dlshow ()
local URL=$1
echo "URL: "$URL
local DATE=`echo $URL|sed -r 's/.*____([0-9]1,2)_([0-9]1,2)_([0-9]1,2).*/20\3-\1-\2/;s/-([0-9]1)-/-0\1-/;s/-([0-9]1)$/-0\1/'`
我不知道为什么作为 bash 命令我会收到错误。
【问题讨论】:
那里看不到错误。我怀疑您在脚本的其他地方有一个额外/缺少的单引号 最好发布您喜欢做的事情,输入/输出。这样,我们可以帮助您。 最好添加一些价值样本。我怀疑 $URL 解释了特殊的字符。尝试使用 echo "$URL" 格伦:你明白了!我在 case 命令中添加了一个带有错误 ' 的部分,这弄乱了脚本。 【参考方案1】:试试这个:
echo $URL | sed -e '...' | read DATE ; ... ;
【讨论】:
我不明白为什么 sed 脚本的评估会失败,而且你关于引号和反引号的陈述是错误的。 @user2719058 我已删除该声明。但避免反引号总是一个好主意:***.com/questions/4708549/… 不幸的是,这样做会在管道定义的子shell内分配DATE
,而不是全局分配。使用命令替换修复此问题: read DATE ; ... ; < <(echo $URL | sed -e '...')
.
@gniourf_gniourf:这只是在卷曲之间折腾命令列表,不是吗?
@user2719058 是,但它会使DATE
在后续命令中可用。以上是关于函数内部 sed 命令中的 bash 语法错误,在命令行上工作正常的主要内容,如果未能解决你的问题,请参考以下文章
我在将我的 bash 命令转换为 shell 脚本中的 shell 脚本语法错误时遇到错误
如何通过 BASH 中的 sed 命令从 Json 文件中删除 Json 对象