【发布时间】:2015-12-05 13:14:11
【问题描述】:
我有这个脚本(只需将其复制并粘贴到 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 --version请在每台机器上使用。 -
看来是解析器的bug;该错误发生在 3.2 版中,但不在 4.3 版中。
-
mac 版本是
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13),linux 版本是GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu) -
@chepner 这是一个已知的错误吗?
-
我认为是这样,除非 bash 4 中的解析器中的其他一些更改巧合地修复了它。如果您真正要问的是“会在 3.2 中修复吗?”,我会说答案是“否”。 3.x 分支将获得针对严重错误(如 Shellshock 漏洞)的安全补丁,但不太可能获得错误修复。