답변:
{}
명령에 두 번 쓰 십시오. 다음과 같이 작동합니다.
$ echo test | xargs -I {} echo {} {}
test test
문제는 명령이 중첩되는 방식 입니다. 이것을 보자.
echo test | xargs -I {} echo {} && echo {}
bash 가 실행 echo test | xargs -I {} echo {}
됩니다. 성공적으로 실행되면 echo {}
실행됩니다. 중첩을 변경하려면 다음과 같이 할 수 있습니다.
echo test | xargs -I {} sh -c "echo {} && echo {}"
그러나이 방법을 사용하면 코드 삽입이 발생하기 쉬워 질 수 있습니다. "test"가 쉘 코드로 대체되면 실행됩니다. 따라서 인수를 사용하여 입력을 중첩 된 쉘에 전달해야합니다.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
. 더 낫습니다xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
또 다른 옵션은 사용하는 것입니다 -i
같은 인 플래그 -I{}
(그것은 교체가 함께 제공됩니다 것을 의미한다 {}
)
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
가 매뉴얼에 추가되었습니다 man xargs
.
나를 위해 소문자 만 작동합니다. 디렉토리에 수백 개의 이미지가 있고 소스를 목록으로 가져 오기를 원했습니다. 대문자 i -I
옵션이 작동하지 않았습니다. 소문자 만 버전 차이로 인해 발생했을 수 있습니다. 이 이미지들은 모두 같은 이름을 가졌습니다 Daniel_(somenumber).jpg
.
이 구문은 효과가 있습니다.
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
보고:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
리눅스 버전 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...