2014-07-13 34 views
0

标准输出,我有以下的Perl线衬线Perl的一个班轮+如何给Perl的线班轮

 echo $line | perl -ne 'while(.....){print "$_";}' >> $FILE 

是可以给予$?上perl的线的输出

所以

$? = 0 in case $_ print some value 
$? = 1 in case $_ is empty (no value) 

例如:

echo $line | perl -ne 'while(.....){print "$_";}' >> $FILE 


    if [[ $? -eq 0 ]] 
    then 
    echo " new line in file " 
    else 
     echo " no new line in file" 
    fi 

完整的语法

/usr/local/bin/perl -ne '$exit = 1;while($_=~m/(?:^|\G:\K)(?:(?!.*old)[^:]+|[^:]*?(?:[a-z]old|\dold[a-z\d])[^:]*)/ig){print "$_";}' 
+0

在perl中调用'exit($ value)',将'$?'设置为'$ value'。 – Barmar

回答

1
echo "$line" | perl -ne 'BEGIN {$exit = 1;} 
         if(/(?:^|\G:\K)(?:(?!.*old)[^:]+|[^:]*?(?:[a-z]old|\dold[a-z\d])[^:]*)/i) {$exit=0; print "$_"; } 
         END {exit($exit);}' >> "$FILE" 

传递给exit()的值将是在$?在壳里。

由于您使用-n自动创建一个输入回路,你需要把代码初始化和BEGINEND块返回$exit。你也不应该在你的代码中放入while,因为这是自动循环的一部分。

+0

你可以编辑请关于我的perl语法 - perl -ne'while($ _ =〜m /(?:^ | \ G:\ K)(?:(?!。* old)[^:] + | [ ^:] *?(?:[az] old | \ dold [az \ d])[^:] *)/ ig){print“$ &\n";}' – maihabunash

+0

更新问题+1 – maihabunash

+0

查看更新后的答案。你在代码中加入'while'会让我困惑,我没有注意到'-n'选项。 – Barmar