이게 뭔지 이해하려고 노력 중이야Docker 진입점은 다음을 수행합니다..
이것은 Dockerfile을 작성할 때 매우 일반적인 패턴인 것 같지만 제 bash 기술은 제한되어 있고 특별한 bash 표기법 트릭을 모두 알지 못합니다.
또한 "--", "$!" 등을 검색하는 것도 어렵습니다. bash 세계에서는 이것을 뭐라고 부르나요?
전체적으로 다음 코드 줄은 무엇을 하려고 합니까?
if [ "${1#-}" != "$1" ]; then
set -- haproxy "$@"
fi
답변1
이 set
명령(옵션이 설정되지 않은 경우)은 위치 인수를 설정합니다.
$ set a b c
$ echo $1
a
$ echo $2
b
$ echo $3
c
이것이 --
"이후는 아무것도 옵션으로 취급하지 않는다"라는 기준이다
이는 "$@"
모두 기존 위치 매개변수입니다.
그래서 주문은
set -- haproxy "$@"
haproxy
등의 앞에 이 단어를 넣습니다 .$1
$2
예를 들어
$ echo $1,$2,$3
a,b,c
$ set -- haproxy "$@"
$ echo $1,$2,$3,$4
haproxy,a,b,c
답변2
이것명령 설정옵션(플래그 포함) 및 매개변수 지원
set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [argument …]
options
명령이 작동하는 방식(예: 파일 이름을 해석하는 방식)을 변경하는 데 사용할 수 있습니다.arguments
명령에 수행할 작업을 알려줍니다. 즉, 사용자 입력
예를 들어 set 명령에는 옵션이 있습니다.
-a
: 생성되거나 수정된 모든 변수나 함수에는 내보내기 속성이 부여되고 후속 명령 환경으로 내보내기 위해 표시됩니다.
실행할 때:
$ set -a 12; echo $1
12
$1
으로 설정되어 있지만 명령 에 의해 소비되는 것을 볼 수 있습니다 12
.-a
set
정말로 as (and as ) -a
로 설정하고 싶다면 (즉, 그 뒤의 모든 것은 인수임)을 사용하여 옵션 처리를 중지하도록 명령에 지시 할 수 있습니다.$1
12
$2
--
set
$ set -- -a 12; echo $1 $2
-a 12