我有这个脚本(只是复制并粘贴到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