Lado esquerdo do tubo é o subshell?

Editar

Meu comentário abaixo sobresed 's@^@ @' <(f1) está incorreto Enquanto$BASH_SUBSHELL indica que estamos no mesmo nível que o lançamento, as variáveis são perdidas no script principal. com base na resposta de Gordon testeif1 > >(sed 's@^@ @') em vez disso, e isso parece funcionar corretamente. Ainda assim, BASH_SUBSHELL não deve ser 1 e não 0 para o primeiro formulário?

Considere este pequeno teste

#!/bin/bash
declare -i i=0
function f1()
{
  let i++
  echo "In f1, SUBSHELL: $BASH_SUBSHELL, i=$i" >&2
}

f1
f1 | sed 's@^@     @'

echo "at end, i=$i"

com a seguinte saída:

In f1, SUBSHELL: 0, i=1
In f1, SUBSHELL: 1, i=2
at end, i=1

(o objetivo dosed é apenas para ter um canal para alguma coisa, não espere que ele faça alguma coisa, porque f1 gera stder

A função f1 registra o BASH_SUBSHELL atual e o valor atual de i

Sei porque no final do script obtemosi=1, porque a segunda invocação estava em uma subcamada e o valor de i na subcamada 1 foi perdid

O que eu não sei é por que o lado esquerdo do tubo não foi executado no shell atual

Eu imaginei que poderia evitar isso comsed 's@^@ @' <(f1) Gostaria de saber por que o lado esquerdo não está no mesmo nível do script principal

questionAnswers(2)

yourAnswerToTheQuestion