![为什么当我使用 xargs 时 bash 变量会消失?](https://linux22.com/image/36734/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E6%88%91%E4%BD%BF%E7%94%A8%20xargs%20%E6%97%B6%20bash%20%E5%8F%98%E9%87%8F%E4%BC%9A%E6%B6%88%E5%A4%B1%EF%BC%9F.png)
我有一个简单的 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 问题非常相似。语法<( )
可能是你的朋友。