hkoba blog

プログラマーです。プログラミング言語ミーハーです。ツッコミ歓迎です。よろしくどうぞ(能代口調)

zparseopts で posix style long option と一文字オプションを両立させる

Zshzparseopts を使って

  • -t TYPE
  • --type TYPE
  • --type=TYPE

全部の書き方をサポートしたい場合にどう書くか。 (代入先の配列名を同じにするだけ、だけど)

値の取り出しの書き方を忘れがちなので、メモ。

(我流なので、ツッコミ歓迎です)

zparseopts がどう働くか

% set -- -t foo
% zparseopts -D -K h=o_help t:=o_type
% typeset o_type
o_type=( -t foo )
%
% set -- --type foobar
% zparseopts -D -K h=o_help t:=o_type -type:=o_type
% typeset o_type
o_type=( --type foobar )
%
% set -- --type=foobar
% zparseopts -D -K h=o_help t:=o_type -type:=o_type
% typeset o_type
o_type=( --type '=foobar' )
%

オプションの検査

配列のサイズを見るのが、良いのではないかと…

if (($#o_type)); then
   # …オプションが指定されている時の処理…
fi

値の取り出し

値の先頭が = で始まる =なんとか みたいな文字列を渡すことを諦めれば ↓この書き方で行ける。

% print -- $o_type[2]
=foobar
% print -- ${${o_type[2]}#=}
foobar
%

.oO(…もっと短く覚えやすい書き方があれば、是非教えて下さい…)