スクリプトから関連付けられたキーと値のペアの文字列を生成するには?

スクリプトから関連付けられたキーと値のペアの文字列を生成するには?

--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(例:スクリプトには2つの引数が必要です)は、build.argsの内容を読み取り、キーと値のペアを--build-arg引数として追加し、結果文字列を出力する必要があります。これが私が期待するものです:

--build-arg ONE=first --build-arg TWO=second

しかし、私のスクリプトを通して私は

bar --build-arg ONE=first --build-arg TWO=second

asはbarスクリプト呼び出しの2番目のパラメータとして渡されます。

答え1

barループ前の作業$1の後に来るものなのでそこに入ります。shift

2つの位置パラメータをオフにするには、を使用しますshift 2。ただし、before loopingに置き換えてshift位置引数のリストを消去する方が安全ですset --。これにより、正しい数のパラメータを提供するためにユーザーに依存する必要がなくなります。一部のシェルはリストにある値よりも多くの値を削除しようとすると診断メッセージを発行します"$@"

また、この場合と通常位置引数を設定するときに誤ってシェルオプションを設定したり、無効なオプションで呼び出すのを防ぐために、通常の代わりにset --inを使用する必要があります。setset

set -- "$@" --build-arg "$line"

関連情報