これが何かを理解しようとしています。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