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

相关内容