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