xargs에서 변수를 두 번 반복하는 방법

xargs에서 변수를 두 번 반복하는 방법

이 예에서는 두 번째 에코 테스트를 어떻게 수행할 수 있습니까?

 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

관련 정보