私は解決しようとしました。これfind
+の使用中に問題が発生しましたが、xargs
別の問題が発生しました。
試してみましたが、a
カウントを増やすことを試みませんでした。((a++))
私は計算された値のいくつかの組み合わせを試しました。let a++
a=$[ $a + 1]
など..
以下の出力を参照してください。
rax@ubuntu:~# find ./test/ -mindepth 1 | xargs -I{} -n1 bash -xc "((a++)) ; echo $a {}"
+ (( a++ ))
+ echo 0 ./test/abc1
0 ./test/abc1
+ (( a++ ))
+ echo 0 ./test/abc1/abc
0 ./test/abc1/abc
+ (( a++ ))
+ echo 0 ./test/abc2
0 ./test/abc2
+ (( a++ ))
+ echo 0 ./test/abc3
0 ./test/abc3
+ (( a++ ))
+ echo 0 ./test/abcparent
0 ./test/abcparent
編集: - xargsはすべて同じシェルで行われました。
例えば。 PIDとともに
rax@ubuntu:~# a=0
rax@ubuntu:~# find ./test/ -mindepth 1 | xargs -L2 -I{} bash -xc "echo $a {} ;((a++)) ; echo $a $$"
+ echo 0 ./test/abc1
0 ./test/abc1
+ (( a++ ))
+ echo 0 1314
0 1314
+ echo 0 ./test/abc1/abc
0 ./test/abc1/abc
+ (( a++ ))
+ echo 0 1314
0 1314
+ echo 0 ./test/abc2
0 ./test/abc2
+ (( a++ ))
+ echo 0 1314
0 1314
+ echo 0 ./test/abc3
0 ./test/abc3
+ (( a++ ))
+ echo 0 1314
0 1314
+ echo 0 ./test/abcparent
0 ./test/abcparent
+ (( a++ ))
+ echo 0 1314
0 1314
答え1
問題は、findを実行する前に変数がbashによって拡張されることです。これは(ログイン)シェルのPIDに$a
拡張されるゼロに拡張されるため、実際に実行されるコマンドは次のようになります。$$
bash -xc
echo 0 {} ;((a++)) ; echo 0 1314
これ{}
は結果としてxargsに置き換えられ、find
値は$a
後で増加しますが印刷されません。変数をエスケープする(たとえば\$a
)、またはより良い方法は、パラメータbash -xc
を二重引用符('
)ではなく一重引用符("
)で囲んで機能することを確認することです。
また、他のコメント作成者が正しいかxargs -n1
(またはを使用して-I{}
)、各引数に対して新しいシェルを実行するため、増分は$a
機能しません。bash -xc
次のコマンド呼び出しでは、増分値は表示されません。