Macos shell错误,带“-bash:糟糕的替换:没有结束`)和#x27&引用;

Macos shell错误,带“-bash:糟糕的替换:没有结束`)和#x27&引用;,macos,bash,Macos,Bash,我有这个脚本(只需复制并粘贴到shell中) 我的问题是为什么会有这样的错误。理想情况下,如何在mac上修复它。可能是MacOS上bash的不兼容版本(或@chepner评论的坏版本),因此您可以天真地用echo重写它: echo '#!/usr/bin/perl while( @mylist>1){ if($i > $initnum) {$i--;} {splice( @mylist,1);} } ' | perl -c 或者,如果您需要保留cat业务,您可以将其拆分为:

我有这个脚本(只需复制并粘贴到shell中)


我的问题是为什么会有这样的错误。理想情况下,如何在mac上修复它。

可能是MacOS上bash的不兼容版本(或@chepner评论的坏版本),因此您可以天真地用echo重写它:

echo '#!/usr/bin/perl
while( @mylist>1){
if($i > $initnum) {$i--;}
    {splice( @mylist,1);}
}
' | perl -c
或者,如果您需要保留
cat
业务,您可以将其拆分为:

cat$initnum){$i--;}
{拼接(@mylist,1);}
}
EOF

这是
bash
3.2中的一个解析器错误,但您的示例是一个非常痛苦的替代品,用于替换一个简单的here文档:

perl -c <<'EOF'
#!/usr/bin/perl
while( @mylist>1){
if($i > $initnum) {$i--;}
   {splice( @mylist,1);}
}
EOF
perl-c$initnum){$i--;}
{拼接(@mylist,1);}
}
EOF

默认情况下,苹果不太可能提供更新版本的
bash
,所以最好是自己安装一个(例如,通过)。请在每台机器上安装
bash--version
;错误发生在3.2版,而不是4.3版。mac版是GNU bash,3.2.51(1)版发行版(x86_64-apple-darwin13),linux版是GNU bash,4.2.25(1)版发行版(x86_64-pc-linux-GNU)@chepner这是一个已知的错误吗?我假设是这样,除非bash 4中的解析器中的其他更改碰巧修复了它。如果你真正想问的是“3.2版会不会修正?”,我会说答案是“不会”。3.x分支将获得针对严重漏洞(如Shellshock漏洞)的安全补丁,但不太可能得到漏洞修复。我知道。我对该特定格式有其他用途。:)
echo '#!/usr/bin/perl
while( @mylist>1){
if($i > $initnum) {$i--;}
    {splice( @mylist,1);}
}
' | perl -c
cat <<'EOF' | perl -c
#!/usr/bin/perl
while( @mylist>1){
if($i > $initnum) {$i--;}
   {splice( @mylist,1);}
}
EOF
perl -c <<'EOF'
#!/usr/bin/perl
while( @mylist>1){
if($i > $initnum) {$i--;}
   {splice( @mylist,1);}
}
EOF