1

出于某种原因,我需要在 Bash 中运行 perl 脚本。但是 perl 中有一个计数器,我想在 shell 脚本(父级)中使用它。但由于某种原因,我无法获取它。

有人可以帮我吗?(我正在做的唯一选择是将 perl 返回代码写入文件中,然后在 shell 脚本(父级)中读取文件以获取值)。

#!/bin/sh
cnt=1
echo "In Bash (cnt: $cnt)"
perl - $cnt <<'EOF'
    #!/usr/bin/perl -w
    my $cnt=shift;
    while ($cnt<100) {
        $cnt++;
    }
    print "In Perl (cnt: $cnt)\n";
    exit $cnt;
EOF
echo "In Bash (cnt: $cnt)"

输出:

$ ./testPerl
在 Bash (cnt: 1)
在 Perl (cnt: 100)
在 Bash (cnt: 1)

4

3 回答 3

3
#!/bin/sh
cnt=1
echo "In Bash (cnt: $cnt)"
cnt=`perl -e '
    my $cnt=shift;
    while ($cnt<100) {
        $cnt++;
    }
    print $cnt;
    exit' $cnt`
echo "In Bash (cnt: $cnt)"
于 2013-06-11T14:00:13.387 回答
1

@askovpen 在我之前回答了这个问题。我想证明如果你愿意,你仍然可以使用heredoc:

#!/bin/sh
cnt=1
echo "before (cnt: $cnt)"
cnt=$(
perl -l - $cnt <<'EOF'
    $x = shift;
    $x++ while $x < 100;
    print $x;
EOF
)
echo "after (cnt: $cnt)"

我更改了 perl 的变量名以明确该变量根本不共享

于 2013-06-11T19:02:25.017 回答
-1
#!/bin/sh
cnt=1
echo "In Bash (cnt: $cnt)"
perl - $cnt <<'EOF'
    #!/usr/bin/perl -w
    my $cnt=shift;
    while ($cnt<100) {
        $cnt++;
    }
    print "In Perl (cnt: $cnt)\n";
    exit $cnt;
EOF
cnt=$?;
echo "In Bash (cnt: $cnt)"
于 2013-06-11T13:33:37.293 回答