나는 해결하려고 노력했다.이것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
확장되는 0으로 확장되므로 실제로 실행되는 명령은 다음과 같습니다.$$
bash -xc
echo 0 {} ;((a++)) ; echo 0 1314
이는 {}
의 결과로 xargs로 대체되며 find
값은 $a
사후 증가되지만 인쇄되지는 않습니다. 변수를 이스케이프 처리(예 \$a
: )하거나 더 나은 방법은 bash -xc
매개변수를 큰따옴표( '
) 대신 작은따옴표( "
)로 묶어서 작동하는지 확인하는 것입니다.
또한 다른 주석 작성자가 정확하거나 xargs -n1
(또는 을 사용하여 -I{}
) 각 인수에 대해 새 쉘을 실행하므로 증분은 $a
작동하지 않습니다. bash -xc
다음 명령 호출에서는 증분된 값이 표시되지 않습니다.