如何强制 bash 从索引 0 开始并选择输出?

如何强制 bash 从索引 0 开始并选择输出?

好吧,即使是一些经验不足的bash用户也会同时知道以下事实:bash 数组总是从索引 0 开始。但是,select总是会做自己的事情,如以下示例所示:

#!/bin/bash
choices=(NONE nyc la chicago little_rock miami)

select choice in ${choices[@]}; do
  [[ " ${choices[*]} " == *" $choice "* ]] && break
done
echo "Choice was: $choice ; first element is ${choices[0]}"

输出是:

1) NONE
2) nyc
... etc. ...

${choices[0]}尽管如此,仍将输出“NONE”!所以我觉得一定有办法强制select开始索引 0,不是 1。

(如果有人质疑这一点的更深层次的意义:实际上是存在的,特别是当您必须经常跳过超过 9 个选项的处理(最好在菜单中设置为“0”),并且为了方便起见,您会放最少的-使用的选项为“10”,因此几乎在每种情况下您可能只需键入一个数字。)

答案1

没有选项可以更改菜单显示项目编号的基数。您在问题中提到,“..即使是一些经验不足的 bash 用户也会知道(关于)...索引 0”。

是的,这是正确的,但select菜单并不是为bash 用户(阅读“程序员”)-它的目的是终端用户(GUI 时代之前)他们通常不知道(或关心)任何关于 bash 的事情。熟悉从零开始的列表是程序员的事情(因此是您的偏好),但它绝对不是最终用户所习惯的。

相关内容