표준 입력에서 변환된 인수 수는 명령의 자리 표시자 수와 동일해야 합니까?

표준 입력에서 변환된 인수 수는 명령의 자리 표시자 수와 동일해야 합니까?

xargs표준 입력 스트림에서 여러 인수가 생성된 경우 ( -d표준 입력 스트림을 여러 인수로 분할하기 위한 구분 기호를 지정할 수 있음) xargs실행할 명령에서 이를 어떻게 다시 정렬할 수 있나요?

xargs-I매개변수를 대체하기 위해 명령에 자리 표시자를 지정하는 옵션이 있습니다 . stdin 입력 스트림에서 여러 매개변수를 생성할 때 xargs자리 표시자가 매개변수와 동일한 횟수로 나타나야 합니까?

예를 들어 표준 입력에서 변환된 인수 수는 명령의 자리 표시자 수와 동일해야 합니까?

$ xargs -I x -d " " ls x x x
-l -t -r

답변1

직접 시도해 볼 수 있습니다.

$ echo -n a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g g g

매뉴얼에서:

-I 교체-str
초기 인수의 교체-str 발생을 표준 입력에서 읽은 이름으로 바꿉니다. 또한 따옴표가 없는 공백은 항목을 종료하지 않으며 대신 구분 기호는 개행 문자입니다. -x 및 -L 1을 의미합니다..

-L max-lines
명령줄당 최대 max-lines 공백이 아닌 입력 줄을 사용합니다. 후행 공백으로 인해 입력 줄이 논리적으로 다음 입력 줄로 계속됩니다. -x를 의미합니다.

-I, -L 1호출당 하나의 매개변수만 사용됩니다. 보시다시피 각 발생은 x매개변수로 대체됩니다.

언뜻 보면 놀랍게 보일 수도 있는 효과도 있습니다.

$ echo a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g
 g
 g

options가 없으면 -necho는 끝에 개행 문자를 출력합니다. option 을 사용할 때 -dxargs바꿈은 구분 기호로 처리되지 않고 인수의 일부로 처리되므로 g\n: 의 출력에 줄 바꿈이 나타납니다 g\n g\n g\n.

관련 정보