標準入力として関数に提供されたデータを保存するには?

標準入力として関数に提供されたデータを保存するには?
> cat b.txt 
function first
    {
    foo=$(SOMEMAGIC)
    }

echo nyi | first 
> 

質問:関数内で文字列「nyi」を「foo」変数にどのように割り当てますか?では、関数にパイプで接続されたデータを関数内の変数に渡すにはどうすればよいですか?

答え1

次のいずれかを実行できます。

標準入力1行を読む

function first
{
    IFS="" read -r foo
}

echo nyi | first

または

最初のパラメータを読む

function first
{
    foo="$1"
}

first nyi

答え2

cat消費された次のジョブに返される入力も使用できます。

$ first () { foo=$(cat); echo b${foo}c; }
$ echo nyi | first
bnyic

関連情報