簡體   English   中英

Bash中的Perl:如何從管道中讀取並同時將參數傳遞給perl?

[英]Perl inside Bash: How to read from pipe and pass arguments to perl at the same time?

以下是我正在嘗試的代碼:

echo "a b c" | perl -e 'print $ARGV[0]; print $ARGV[1]; print $_;' "abc" "def"

此代碼的輸出是:

abcdef

我無法弄清楚為什么“打印$ _;” 不像往常一樣打印“abc”。 有任何想法嗎?

您沒有使用-n-p ,因此您不使用<>作為標准輸入。 如果你有參數,你不會做任何事情。

說明:

使用-n-p ,它會在代碼周圍放置一個while(<>)循環,如下所示:

perl -ne ' print ' 

等於

perl -e ' while (<>) { print }'

如果你使用-p它是:

perl -e ' while (<>) { print } continue { print $_ }'

在這個階段,Perl將通過檢查@ARGV來確定<>將如何工作,其中存儲了腳本的參數。 如果其中有任何內容,它會將參數視為文件名,並嘗試打開並讀取這些文件。 然后將文件句柄稱為ARGV 此時, <>不能用於從標准輸入讀取。

換句話說,使用參數將覆蓋STDIN的讀數。 因此,如果您想從標准輸入讀取,則使用該文件句柄:

echo "a b c" | perl -e ' print @ARGV[0,1]; while (<STDIN>) { print } ' foo bar

另一個選擇是預先清除@ARGV數組,如下所示:

echo "a b c"|perl -ne'BEGIN { @x = @ARGV; @ARGV = () }; print @x; print;' foo bar

但是,這也會在每行輸入中打印@x一次,這可能並不理想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM