No seu exemplo que não funciona, o pipe envia o stdout da sua primeira função f
para o stdin da sua segunda função ff
. A função ff
não está processando seu stdin; ele está processando argumentos passados para ele.
Aqui está uma maneira de fazer a primeira linha funcionar:
ff 'f 1'
As backquotes executam o f 1
e o valor resultante é passado como um argumento para ff
.
Você também pode usar read
se quiser ler a entrada:
ff()
{
while read in
do
echo $in $in
done
}