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[@]}"