関数に渡されたデータを標準入力に保存するにはどうすればよいでしょうか?

関数に渡されたデータを標準入力に保存するにはどうすればよいでしょうか?
> cat b.txt 
function first
    {
    foo=$(SOMEMAGIC)
    }

echo nyi | first 
> 

質問: 関数内の「foo」変数に「nyi」文字列を渡すにはどうすればよいでしょうか。では、パイプライン経由で関数に渡されたデータを関数内の変数に渡すにはどうすればよいでしょうか。

答え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

関連情報