]> www.infradead.org Git - users/sagi/nvme-cli.git/commit
completions: Collapse declaration and attribute assignment
authorBrad Mouring <brad@the-bradlands.net>
Tue, 3 May 2022 03:38:24 +0000 (22:38 -0500)
committerBrad Mouring <brad@the-bradlands.net>
Tue, 3 May 2022 03:38:24 +0000 (22:38 -0500)
commit25fd8c707b106ca0763402566ad657ef710bf09e
tree05306b82496e8d8d2d2549eebc5ecd217ff9726f
parent29c666080dc21ed58d9bc448dc272b57bc5518d9
completions: Collapse declaration and attribute assignment

Previously, the associative arrays for the vendor/subcommands and
vendor/functions listings were split into a declaration of type
(using "typeset") and attribute definition (using "readonly"). On
bash 5.1.16 (at least), this lead to the following error (reported
after enabling -xv to expand and print shell inputs)

  ...
  + . /usr/share/bash-completion/completions/nvme
  # bash tab completion for the nvme command line utility
  # (unfortunately, bash won't let me add descriptions to cmds)
  # Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015

  # Constant to indicate command has no options
  readonly NO_OPTS=""
  ++ readonly NO_OPTS=
  ++ NO_OPTS=

  # Associative array of plugins and associated subcommands
  # Order here is same as PLUGIN_OBJS in Makefile
  typeset -A _plugin_subcmds
  ++ typeset -A _plugin_subcmds
  readonly _plugin_subcmds=(
          [intel]="id-ctrl internal-log lat-stats \
  ...
  ++ _plugin_subcmds=(['intel']='id-ctrl internal-log lat-stats...
  bash: 'intel': syntax error: operand expected (error token is "'intel'")
  ...

Using the available flags for "typeset" to declare the variables as
readonly arrays resolved the issue (and allows for bash completion
to work as-expected)

Signed-off-by: Brad Mouring <bmouring@gmail.com>
completions/bash-nvme-completion.sh