![xargs에서 변수를 두 번 반복하는 방법](https://linux55.com/image/84720/xargs%EC%97%90%EC%84%9C%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EB%91%90%20%EB%B2%88%20%EB%B0%98%EB%B3%B5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
이 예에서는 두 번째 에코 테스트를 어떻게 수행할 수 있습니까?
echo test | xargs -I {} echo {} && echo {}
답변1
{}
명령에 두 번만 쓰십시오. 다음이 작동합니다:
$ echo test | xargs -I {} echo {} {}
test test
문제는 명령 방식입니다중첩됨. 이것을 살펴보자:
echo test | xargs -I {} echo {} && echo {}
세게 때리다실행됩니다 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 {}
답변2
-i
또 다른 옵션은 다음과 동일한 플래그를 사용하는 것입니다 -I{}
(대체는 로 제공됨을 의미함 {}
).
$ echo test | xargs -i echo {} {}
답변3
나에게는 소문자만 작동한다. 디렉토리에 수백 개의 이미지가 있고 해당 소스를 목록에 추가하고 싶습니다. 대문자 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'
...
Linux 버전 4.14.96-hw+ #80 SMP x86_64 GNU/Linux