명령이 호출되는 빈도를 계산하려는 간단한 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 질문은 매우 유사합니다.. 문법은 <( )
당신의 친구가 될 수 있습니다.