функция карты Unix - PullRequest
       4

функция карты Unix

8 голосов
/ 25 января 2011

У меня есть массив значений $dates, который я преобразовываю:

for i in $dates
do
  date -d "1970-01-01 $i sec UTC" '+%a_%D' 
done

Есть ли способ сохранить результат этой операции, чтобы я мог передать его чему-то другому, не записывая его вфайл на диске?

Ответы [ 6 ]

13 голосов
/ 25 января 2011

Поскольку вы говорите «преобразование», я предполагаю, что вы имеете в виду, что хотите захватить выходные данные цикла в переменной.Вы даже можете заменить содержимое вашей переменной $dates.

dates=$(for i in "$dates"; do date -d "@$i" '+%a_%D'; done)
6 голосов
/ 25 января 2011

Создать функцию:

foo () {
        for i in $@
        do
                date -d "1970-01-01 $i sec UTC" '+%a_%D'
        done
}

Тогда вы можете, например, отправить вывод на стандартную ошибку:

echo `foo $dates` >&2
3 голосов
/ 25 января 2011

Ваш вопрос немного расплывчат, но может сработать следующее:

for ...
do
 ...
done | ...
2 голосов
/ 25 января 2011

Вы можете записать его в FIFO - «именованный канал», который выглядит как файл.

В Википедии есть хороший пример использования: http://en.wikipedia.org/wiki/Named_pipe

1 голос
/ 25 января 2011

Если вы используете bash, вы можете использовать массив:

q=0
for i in $dates
do
  DATEARRAY[q]="$(date -d "1970-01-01 $i sec UTC" '+%a_%D')"
  let "q += 1"
done

Затем вы можете передать / передать этот массив в другую программу.Обратите внимание, что массивы зависят от bash, а это означает, что это не переносимое решение (кроме систем, в которых есть bash).

1 голос
/ 25 января 2011

Редактировать, не видел весь файл вещь:

for i in $dates ; do
    date -d "1970-01-01 $i sec UTC" '+%a_%D'
done |foo
...