저는 두 개의 매개변수를 사용하여 bash 스크립트를 호출하고 있습니다. 이를 param_one
and 이라고 부르겠습니다 param_two
. 또한 test
두 줄이 포함된 파일이 있습니다 .
line_one
line_two
내 스크립트는 다음과 같습니다
cat test | xargs -I% bash -c 'echo % $1 $2;'
내가 찾고있는 결과는 다음과 같습니다.
line_one param_one param_two
line_two param_one param_two
하지만 나는 계속 이런 말을 듣습니다.
line_one
line_two
xargs
스크립트에 여러 매개변수가 있으면 무시됩니다. 스크립트를 이렇게 변경해도 인쇄만 됩니다.param_oneparam_one
cat test | xargs -I% bash -c 'printf '$1 $2';'
그러나 동일한 명령에서 스크립트를 호출할 때 %
from 및 from 세 가지 매개변수를 모두 사용해야 합니다 . 이를 수행하는 적절한 방법에 대한 제안이 있습니까, 아니면 부적절합니까?xargs
$1
$2
xargs
xargs
답변1
존재하다:
cat test | xargs -I% bash -c 'echo % $1 $2;'
$1
$2
매개변수에 리터럴 문자열 bash -c
(예: 인라인 스크립트) 로 전달 됩니다 . %
스크립트 내에서도 확장되므로 쉘 코드로 처리됩니다 . 예를 들어, test
포함된 경우 명령 ;reboot;
을 호출하게 됩니다 reboot
.
이 인라인 스크립트에 매개변수를 전달하지 않으므로 $1
은 $2
비어 있습니다.
다음을 수행할 수 있습니다.
< test xargs -I% bash -c 'echo "$1" "$2" "$3"' bash % "$1" "$2"
스크립트의 인수를 인라인 스크립트로 전달하고 문자가 포함된 $1
경우 $2
거기에서 확장할 수도 있습니다 %
.xargs
따라서 환경을 사용하여 다음 값을 전달할 수 있습니다.
< test PARAM1=$1 PARAM2=$2 xargs -I% bash -c '
echo "$1" "$PARAM1" "$PARAM2"' bash %
또한 xargs
입력 내용에 일부 인용이 있다는 점에 유의하십시오. 이는 각 줄의 원시 콘텐츠를 그대로 전달하려는 경우 사용하는 것이 아닙니다. GNU를 사용하면 xargs
다음과 같은 작업을 수행할 수 있습니다.
< test xargs -d '\n' -n 1 bash -c 'echo "$3" "$1" "$2"' bash "$1" "$2"
또한 변수를 인용하는 것을 잊지 마십시오. 보다 printf
더 신뢰할 수 있습니다echo
체재, 그래서는 안됩니다바꾸다.