Arrays bash中切片数组的循环索引

Arrays bash中切片数组的循环索引,arrays,bash,for-loop,slice,Arrays,Bash,For Loop,Slice,我想从第二个索引开始循环数组的索引。我该怎么做 我试过: myarray=(“test1”“test2”“test3”“test4”) 对于${!myarray[@]:1}中的i 做 #我只打印索引以简化示例 回声$i 完成 但是不起作用 显然,这是可行的: myarray=(“test1”“test2”“test3”“test4”) MyIndexes=(“${!myarray[@]}”) 对于${myindex[@]:1}中的i 做 回声$i 完成 但是,如果可能的话,我想将for循环语

我想从第二个索引开始循环数组的索引。我该怎么做

我试过:

myarray=(“test1”“test2”“test3”“test4”)
对于${!myarray[@]:1}中的i
做
#我只打印索引以简化示例
回声$i
完成
但是不起作用

显然,这是可行的:

myarray=(“test1”“test2”“test3”“test4”)
MyIndexes=(“${!myarray[@]}”)
对于${myindex[@]:1}中的i
做
回声$i
完成
但是,如果可能的话,我想将for循环语句中的所有内容组合起来。

我会这样做:

#/usr/bin/env bash
myarray=('a''b''c''d')
开始索引=2
#生成以空分隔的索引列表
printf'%s\0'${!myarray[@]}|
#将索引列表的第二个条目切成最后一个条目
cut--以零结尾--分隔符=“”--fields=“${start\u index}--”|
#迭代切片索引列表
而read-r-d'i;做
回音“$i”
完成
输出未按预期列出第一个索引
0

1
2.
3.
也适用于关联数组:

#/usr/bin/env bash
字体-A myassocarray=([“foo”]=“A”[“bar”]=“b”[“baz”]=“c”[“qux”]=“d”)
开始索引=2
#生成以空分隔的索引列表
printf'%s\0'${!myassocarray[@]}|
#将索引列表的第二个条目切成最后一个条目
cut--以零结尾--分隔符=“”--fields=“${start\u index}--”|
#迭代切片索引列表
而read-r-d''k;做
回音“$k”
完成
输出:

条
巴兹
库克斯
使用参数长度扩展:

myarray=( "test1" "test2" "test3" "test4")
for (( i=1;  i < ${#myarray[@]};  i++ ))
do
    # only print the indices to simplify the example
    echo $i 
done
生成错误代码1并输出到STDERR:

bash: test1 test2 test3 test4: bad substitution

至少对于当前版本的
bash
,v.4.4及更早版本。不幸的是,
manbash
没有充分说明子字符串扩展不能与间接扩展一起工作。

在我的系统(bash v4.4.20)上,关联代码输出:
baz foo qux
(但空格实际上是
\n
s)。仔细看,
echo${!myassocaray[@]}
输出:
bar baz foo qux
,这意味着
bash
正在按索引名的字母顺序排列。相关问题:我想我的意图被误解了。我想以最简单的方式在从1到数组最后一个索引的范围内进行for循环。这将输出预期的结果,但并不比我已经在工作的答案更简单。我只是想知道它是否可以在for循环声明中以某种方式完成。请澄清该数组是索引数组还是关联数组。它是一个索引数组。为了完整性,我添加了更多的代码。如果有人知道
bash
wishlist或功能请求错误,关于使用间接扩展子字符串扩展,请发布一个URL。
bash: test1 test2 test3 test4: bad substitution