getoptions
getoptions copied to clipboard
初期値のバックスラッシュが自動的にエスケープされる
getoptions を日頃より利用させてもらっております。開発者の皆様ありがとうございます。
以下のような ShellScript コードを作成し、 gengetoptions embed --overwrite
を利用して、オプション解析のコードを追加した後実行すると、オプション -a
のバックスラッシュが自動的にエスケープされるようです。
# @getoptions
parser_definition() {
setup REST
param a -a init:='\\'
}
# @end
# @gengetoptions parser -i parser_definition parse
# @end
parse "$@"
eval "set -- $REST"
printf '%s\n' "$a"
直接 -a
を指定するとエスケープされないようです。
$ sh a
\
$ sh a -a '\\'
\\
この動作はバグでしょうか。それとも仕様でしょうか。
当方の動作環境は以下のようになります。
$ getoptions -v
v3.3.0
$ gengetoptions -v
v3.3.0
$ dpkg -l | grep dash
ii dash 0.5.8-2.10 i386 POSIX-compliant shell
わたしは開発者ではありませんので仕様はわかりませんが、パラメーターに「バックスラッシュ バックスラッシュ」を渡しているのなら変数に「バックスラッシュ バックスラッシュ」がセットされるのは望ましい動作ではないでしょうか。
もしかして、単引用符と二重引用符の違いから「バックスラッシュ」を渡していると勘違いなさっているかもしれません。
$ printf "%s\n" "\\" '\\'
\
\\
getoptions の init:=
の方は、エスケープする必要があって注意が必要です。