シェルスクリプトで配列要素を回転させたい
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
3番目の位置引数(シェルスクリプトの引数)に展開されます。これは同じまたは空の場合(通常は対話型シェル)です${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]