инкрементная переменная bash при работе с конвейером - PullRequest
2 голосов
/ 11 июля 2011

Я пытаюсь сделать следующее:

function func() # in practice: logs the output of a code block to a file
{
    if [ -z "$c" ]; then
        c=1
    else
        (( ++c ))
    fi
    tee -a /dev/null
    echo "#$c"
}

{
echo -n "test"
} | func

{
echo -n "test"
} | func

Но приращение не работает, переменная c остается "1".
Я видел этопоток , но он не работает для моего случая - когда я пытаюсь это сделать, появляется синтаксическая ошибка.

1 Ответ

3 голосов
/ 11 июля 2011

Уловка в связанном вопросе работает для меня:

#!/bin/bash
function func() # in practice: logs the output of a code block to a file
{
    if [ -z "$c" ]; then
        c=1
    else
        (( ++c ))
    fi
    tee -a /dev/null
    echo "#$c"
}

func < <(echo -n "test")
func < <(echo -n "test again")

это печатает:

test#1
test again#2

Используете ли вы #!/bin/bash в качестве своего шебанга?Если вы используете #!/bin/sh, некоторые расширения bash (например, <( )) будут недоступны.

...