如何通过当前 shell (zsh/bash) 检测数组起始索引?

Lin*_*uel 5 arrays indexing bash shell zsh

我们都知道 Bash 中的数组从 0 开始索引,而 zsh 中的数组从 1 开始索引。

如果我无法确保运行环境是 bash、zsh 或其他环境,脚本如何知道它应该使用 0 或 1?

预期代码示例:

#!/bin/sh

detect_array_start_index(){
  # ... how?
  echo 1
}
ARR=(ele1 ele2)
startIndex=$(detect_array_start_index) # 0 or 1
for (( i=${startIndex}; i < ${#ARR[@]} + $startIndex; i++ )); do
    echo "$i is ${ARR[$i]}"
done
Run Code Online (Sandbox Code Playgroud)

我有一个想法是找到固定数组中第一个值的索引,我得到了这个:Get the index of a value in a Bash array,但接受的答案使用 bash 变量间接语法${!VAR[@]},这在 zsh 中无效。

oka*_*api 6

检查二元素数组的索引 1 元素:

detect_array_start_index() {
  local x=(1 0)                                                   
  echo ${x[1]}
}
Run Code Online (Sandbox Code Playgroud)