xargs를 사용할 때 bash 변수가 사라지는 이유는 무엇입니까?

xargs를 사용할 때 bash 변수가 사라지는 이유는 무엇입니까?

명령이 호출되는 빈도를 계산하려는 간단한 bash 스크립트가 있습니다. 다음은 최소한의 예입니다. 카운터는 c라고 하며 마지막에는 4가 되어야 합니다.

#!/bin/bash

c=0;
for a in X Y; do
  for b in 1 2; do
    c="$(( ${c} + 1 ))"
    echo "${a}${b}"
  done #| xargs -L 1 -P 20 echo
  echo "count $c"
done
echo "--"
echo "final $c"

xargs 없이도 잘 작동하지만(final=4), xargs에 대한 파이프의 주석 처리를 제거하면 아무 것도 없는 것으로 계산됩니다(final=0). 왜?

Expected output: |  This happens with xargs:
X1               |  X1
X2               |  X2
count 2          |  count 0
Y1               |  Y1
Y2               |  Y2
count 4          |  count 0
--               |  --
final 4          |  final 0

답변1

파이핑은 for 루프가 서브쉘에서 발생하고 $c를 프로그램의 나머지 부분으로 다시 전달하지 않는다는 것을 의미합니다. 파이프 없이 다시 작성해야 합니다. 이 StackOverflow 질문은 매우 유사합니다.. 문법은 <( )당신의 친구가 될 수 있습니다.

관련 정보