printfでダッシュを使用する

printfでダッシュを使用する

printf文字列でダ​​ッシュを使用するには?

x=xxx
printf -v args "-x=%s" "$x"
printf "$var"

しかし、エラーが発生します。

./tmp.sh: line 2: printf: -x: invalid option
printf: usage: printf [-v var] format [arguments]

これが選択とprintf説明されることはわかりますが、どのように克服できますか?-x

たとえば、printfコマンドライン引数に対応する文字列を作成するために使用します。-x=xxx -y=yyy -z=zzz

eval $tool args

答え1

printf既存のオプション終了パラメータのサポート--

$ printf -- '-x\n'
-x

答え2

ダッシュを文字通り処理する--には、最後にoptions()引数を使用できます。printf

printf -v var -- '-x=%s' "$x"

出力:

$ x=xxx && printf -v var -- '-x=%s' "$x" && echo $var
-x=xxx

答え3

オプションを使用しているようなので、printf書式文字列を使用して-x変数の値と値を出力します。

printf '%s=%s' '-x' "$x"

事前生成されたコマンドラインを使用してツールを呼び出すには、コマンドラインパラメータを文字列に入力しないでください。set次の値を設定するために使用されます$@

set -- -x="$x" -y="$y" -z="$z"

次にツールを呼び出します。

tool "$@"

これにより、1つ以上の値、またはスペースが含まれている場合でも、ツールが正しい数の引数を取得して正しく引用することができ$xます。$y$z

またはbash配列を使用します。

args=( -x="$x" -y="$y" -z="$z" )

tool "${args[@]}"

関連情報