函数内部的sed命令中存在bash语法错误,在命令行中可以正常工作

函数内部的sed命令中存在bash语法错误,在命令行中可以正常工作,bash,sed,Bash,Sed,我有一个bash脚本,它有两个函数,一个是包含case命令的主函数,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

我有一个bash脚本,它有两个函数,一个是包含case命令的主函数,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命令时会出现错误。

尝试以下方法:

echo $URL | sed -e '...' |  { read DATE ; ... ; }

我看不出有什么错误。我怀疑你在脚本的其他地方有一个额外的/缺少的单引号。你最好发布你喜欢做的事情,输入/输出。这样,我们可能会帮助你。最好添加一些有价值的样本。我怀疑$URL有特殊的字符。尝试使用echo“${URL}”格伦:明白了!我在case命令中添加了一个带有“错误”的部分,这使脚本变得混乱。我不明白为什么sed脚本的计算会失败,并且您关于引号和反勾号的陈述是错误的。@user2719058我已经删除了该陈述。但避免反勾号始终是一个好主意:不幸的是,这样做将在管道定义的子shell中分配
DATE
,而不是全局分配。通过命令替换来修复此问题,如下所示:
{read DATE;..;}<@gniourf\u gniourf:这只是在卷发之间的命令列表中来回切换,不是吗?@user2719058是这样,但它将在后续命令中提供
DATE