1

У меня есть следующий код. Во всех случаях я ожидаю получить 1 1 . Может кто-нибудь объяснить, почему я не получаю ожидаемый результат в первом случае?

Вопрос кажется очень простым, и я думаю, что мне не хватает чего-то простого.

Заранее спасибо.

#!/bin/bash

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

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

# ok
X=$(f 1)
ff $X

1 ответ1

3

В вашем примере, который не работает, канал отправляет стандартный вывод вашей первой функции f на стандартный вывод второй функции ff . Функция ff не обрабатывает свой стандартный ввод; это обработка аргументов, переданных ему.

Вот способ заставить первую строку работать:

ff `f 1`

Обратные кавычки выполняют f 1 а полученное значение передается в качестве аргумента для ff .

Вы также можете использовать read если вы хотите прочитать ввод:

ff()
{
  while read in
  do
    echo $in $in
  done
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .