Bash

為什麼當我使用 xargs 時 bash 變數會消失?

  • May 19, 2014

我有一個簡單的 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

管道意味著您的 for 循環發生在子外殼中,它不會將 $c 傳遞回程序的其餘部分。您需要在沒有管道的情況下重寫。 這個 StackOverflow 問題非常相似<( )語法可能是你的朋友。

引用自:https://unix.stackexchange.com/questions/130999