外壳错误与"-bash: bad substitution: no closing `)'"



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

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

在一台linux机器上,我得到了/dev/fd/63 syntax OK输出,这是可以的。但是在macbook终端上,我看到这个

$ perl -c <(cat <<'EOF'
> #!/usr/bin/perl
> while( @mylist>1){
> if($i > $initnum) {$i--;}
>    {splice( @mylist,1);}
> }
> EOF
> )
-bash: bad substitution: no closing `)' in <(cat <<'EOF'
#!/usr/bin/perl
while( @mylist>1){
if($i > $initnum) {$i--;}
   splice( @mylist
}
EOF
)

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

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

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

苹果似乎不太可能在默认情况下发布新版本的bash,所以你最好的选择是自己安装一个(例如通过Homebrew)。

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

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

或者如果你需要保持cat业务,你可以把它分解成一个管道:

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

最新更新