--build-arg
일부 키/값 쌍(build.args 파일)을 사용하여 busybox 셸에서 인수 문자열을 작성 해야 합니다 .
스크립트 파일
#!/bin/sh
one=$1
two=$2
shift
while IFS= read -r line; do
set "$@" --build-arg "$line"
done < "build.args"
echo "$@"
빌드 매개변수
ONE=first
TWO=second
실행 sh script.sh foo bar
(예, 스크립트에는 두 개의 인수가 필요함)은 build.args의 내용을 읽고 키/값 쌍을 --build-arg
인수로 추가하고 이 결과 문자열을 출력해야 합니다. 이것이 내가 기대하는 것입니다:
--build-arg ONE=first --build-arg TWO=second
하지만 내 스크립트를 통해 나는
bar --build-arg ONE=first --build-arg TWO=second
as는 bar
스크립트 호출의 두 번째 매개변수로 전달됩니다.
답변1
bar
루프 이전의 작업 $1
뒤에 오는 것이기 때문에 거기에 들어갑니다 .shift
두 개의 위치 매개변수를 끄려면 를 사용하십시오 shift 2
. 그러나 before looping 으로 대체하여 shift
위치 인수 목록을 지우는 것이 더 안전할 수 있습니다 set --
. 이렇게 하면 올바른 수의 매개변수를 제공하기 위해 사용자에게 의존할 필요가 없습니다. 일부 쉘은 목록에 있는 것보다 더 많은 값을 제거하려고 하면 진단 메시지를 발행하며, 사용자가 너무 적거나 너무 많은 값을 제공하면 값이 여전히 남아 있습니다 "$@"
.
또한 이 경우와 일반적으로 위치 인수를 설정할 때 실수로 쉘 옵션을 설정하거나 이 경우 유효하지 않은 옵션으로 호출하는 것을 방지하려면 set --
일반 대신 in을 사용해야 합니다 .set
set
set -- "$@" --build-arg "$line"