¿Cómo almacenar los datos proporcionados a una función en la entrada estándar?

¿Cómo almacenar los datos proporcionados a una función en la entrada estándar?
> cat b.txt 
function first
    {
    foo=$(SOMEMAGIC)
    }

echo nyi | first 
> 

Pregunta: ¿Cómo podemos darle la cadena "nyi" a la variable "foo" dentro de la función? Entonces, ¿cómo podemos pasar los datos que se le dieron a la función a través de una canalización a una variable dentro de la función?

Respuesta1

Puedes hacer uno de estos

Leer una línea de entrada estándar

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

echo nyi | first

o

Lea el primer argumento.

function first
{
    foo="$1"
}

first nyi

Respuesta2

También puede utilizar catpara consumir la entrada y luego devolverla a la tarea.

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

información relacionada