Bash e duplo eco

1

Eu tenho o seguinte código. Em todos os casos, estou esperando obter 1 1 . Alguém poderia explicar por que eu não recebo a saída esperada no primeiro caso?

A pergunta parece ser muito simples e acho que estou perdendo algo básico.

Obrigado antecipadamente.

#!/bin/bash

f(){
    echo $1
}
ff(){
    echo $1 $1
}

# expecting 1 1, but got empty      
f 1 | ff

# ok
X=$(f 1)
ff $X
    
por ravnur 24.04.2013 / 19:12

1 resposta

3

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
}
    
por 24.04.2013 / 19:19

Tags