쉘 스크립트에서 배열 요소 회전

쉘 스크립트에서 배열 요소 회전

쉘 스크립트에서 배열 요소를 회전하고 싶습니다

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세 번째 위치 인수(셸 스크립트에 대한 인수)로 확장됩니다. 이는 동일하거나 비어 있는 경우(일반적으로 대화형 셸에서) 입니다 ${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]

관련 정보