我想在 shell 脚本中旋转数组的元素
Array=(11 22 33 44 55)
我试过这个
Array[0]=${Array[$3]}
但它不起作用,我得到了声明的数组。为什么?
最后我让它工作了
j=0
k=3
Array[$j]=${Array[$k]}
但问题是为什么我们不能像以前那样直接传递索引?
答案1
蒂蒂姆:
Array=(11 22 33 44 55)
Array[0]=${Array[3]} # "3", not "$3"
这会导致:
Array=(44 22 33 44 55)
$3
展开到第三个位置参数(shell 脚本的参数),如果它为空(通常在交互式 shell 中),则与or${array[$3]}
相同。${array[0]}
$array
如果你想实现:
Array=(55 11 22 33 44)
你需要这样做:
Array=("${Array[4]}" "${Array[@]:0:4}")
或者更一般地说:
Array=("${Array[@]: -1}" "${Array[@]:0:${#Array[@]}-1}")
使用zsh
,您还可以执行以下操作:
Array[1,0]=$Array[-1] # insert the last element at the beginning
Array[-1]=() # remove the last element
或者:
Array=("$Array[-1]" "${(@)Array[1,-2]}")
和yash
:
array -i Array 0 "${Array[-1]}"
array -d Array -1
使用fish
(假设数组至少有 2 个元素):
set Array 11 22 33 44 55
set Array $Array[-1 1..-2]