@@ -120,25 +120,19 @@ _comp_cmd_gtar__parse_help_line()
120120}
121121
122122# Parse the output of "tar --help" with GNU tar and store the parse results
123- # into variables .
123+ # in a global variable .
124124#
125- # @var[out] long_opts
126- # @var[out] short_opts
127- # @var[out] long_arg_none
128- # @var[out] long_arg_opt
129- # @var[out] long_arg_req
130- # @var[out] short_arg_none
131- # @var[out] short_arg_opt
132- # @var[out] short_arg_req
133- # The parse results are returned in these variables.
134- _comp_cmd_gtar__parse_help ()
125+ # @var[out] _comp_cmd_gtar__parse_help__result
126+ # The parse results are stored in this global variable in a form that can
127+ # be evaluated by the builtin "eval".
128+ _comp_cmd_gtar__parse_help_initialize ()
135129{
136- long_arg_none=" "
137- long_arg_opt=" "
138- long_arg_req=" "
139- short_arg_none=" "
140- short_arg_opt=" "
141- short_arg_req=" "
130+ local long_arg_none=" "
131+ local long_arg_opt=" "
132+ local long_arg_req=" "
133+ local short_arg_none=" "
134+ local short_arg_opt=" "
135+ local short_arg_req=" "
142136
143137 local str line arg
144138 while IFS= read -r line; do
@@ -164,10 +158,45 @@ _comp_cmd_gtar__parse_help()
164158 fi
165159 done <<< " $(tar --help)"
166160
167- long_opts=" \
168- $long_arg_none $long_arg_opt $long_arg_req "
161+ local long_opts=" $long_arg_none $long_arg_opt $long_arg_req "
162+
163+ local short_opts=" $short_arg_none$short_arg_opt$short_arg_req "
164+
165+ printf -v _comp_cmd_gtar__parse_help__result ' %s=%q ' \
166+ long_opts " $long_opts " \
167+ short_opts " $short_opts " \
168+ long_arg_none " $long_arg_none " \
169+ long_arg_opt " $long_arg_opt " \
170+ long_arg_req " $long_arg_req " \
171+ short_arg_none " $short_arg_none " \
172+ short_arg_opt " $short_arg_opt " \
173+ short_arg_req " $short_arg_req "
169174
170- short_opts=" $short_arg_none$short_arg_opt$short_arg_req "
175+ # Clean up functions only used in initialization
176+ unset -f " $FUNCNAME "
177+ unset -f _comp_cmd_gtar__parse_help_line
178+ unset -f _comp_cmd_gtar__parse_help_opt
179+ }
180+ _comp_cmd_gtar__parse_help_initialize
181+
182+ # Load the parse results of "tar --help" for GNU tar into variables.
183+ #
184+ # @var[out] long_opts
185+ # @var[out] short_opts
186+ # @var[out] long_arg_none
187+ # @var[out] long_arg_opt
188+ # @var[out] long_arg_req
189+ # @var[out] short_arg_none
190+ # @var[out] short_arg_opt
191+ # @var[out] short_arg_req
192+ # The parse results are returned in these variables.
193+ #
194+ # @var[in] _comp_cmd_gtar__parse_help__result
195+ # The parse results are obtained by evaluating this variable with the
196+ # "eval" builtin.
197+ _comp_cmd_gtar__parse_help ()
198+ {
199+ eval -- " $_comp_cmd_gtar__parse_help__result "
171200}
172201
173202# Hack: parse --warning keywords from tar's error output
0 commit comments