我有一个简单的 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 循环发生在子 shell 中,它不会将 $c 传递回程序的其余部分。您需要在没有管道的情况下重写。 这个 StackOverflow 问题非常相似。语法<( )
可能是你的朋友。