xargs에서 변수를 두 번 반복하는 방법 방법은 무엇입니까? echo test | xargs

이 예제에서 두 번째 에코를 테스트하여 에코 출력하는 방법은 무엇입니까?

 echo test  | xargs -I {} echo {} && echo {}



답변

{}명령에 두 번 쓰 십시오. 다음과 같이 작동합니다.

$ 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 {}


답변

또 다른 옵션은 사용하는 것입니다 -i같은 인 플래그 -I{}(그것은 교체가 함께 제공됩니다 것을 의미한다 {})

$ echo test | xargs -i echo {} {}


답변

나를 위해 소문자 만 작동합니다. 디렉토리에 수백 개의 이미지가 있고 소스를 목록으로 가져 오기를 원했습니다. 대문자 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


답변