셸 스크립트의 연관 배열

지식인

쉘 스크립트에서 연관 배열을 구현하는 트릭을 보았습니다. 예를 들어 여기서 key = apples print array["apples"]로 스크립팅 할 수 있습니다 echo \$array$key.

그러나 배열을 반복하기 위해 키를 생성하는 방법에 대한 언급이 없습니다. 내가 생각할 수있는 유일한 방법은 for-loop를 사용하여 배열을 반복 할 수 있도록 공백으로 구분 된 변수에 키를 저장하는 것입니다.

그렇다면 나중에 사용하기 위해 키를 저장하는 다른 방법이 있습니까?

Gilles 'SO- 그만 사악함'

연관 배열이있는 쉘

일부 최신 셸은 ksh93, bash ≥4, zsh와 같은 연관 배열을 제공합니다. ksh93 및 bash에서는 a연관 배열이면 "${!a[@]}"해당 키의 배열입니다.

for k in "${!a[@]}"; do
  echo "$k -> ${a[$k]}"
done

zsh에서 해당 구문은 ksh 에뮬레이션 모드에서만 작동합니다. 그렇지 않으면 zsh의 기본 구문을 사용해야합니다.

for k in "${(@k)a}"; do
  echo "$k -> $a[$k]"
done

${(k)a}a빈 키가없는 경우에도 작동합니다 .

zsh에서는 ey kvalues를 동시에 반복 할 수도 있습니다 .

for k v ("${(@kv)a}") echo "$k -> $v"

연관 배열이없는 쉘

연관 배열이없는 쉘에서 연관 배열을 에뮬레이트하는 것은 훨씬 더 많은 작업입니다. 연관 배열이 필요한 경우 ksh93 또는 Perl과 같은 더 큰 도구를 가져올 때입니다.

단순한 POSIX 쉘에 연관 배열이 필요한 경우 키가 문자 0-9A-Z_a-z(ASCII 숫자, 문자 및 밑줄) 만 포함하도록 제한 될 때이를 시뮬레이션하는 방법이 있습니다 . 이 가정 하에서 키는 변수 이름의 일부로 사용될 수 있습니다. 아래 함수는 두 개의 연속 된 밑줄을 포함하지 않아야하는 이름 지정 접두사 "줄기"로 식별되는 배열에서 작동합니다.

## ainit STEM
## Declare an empty associative array named STEM.
ainit () {
  eval "__aa__${1}=' '"
}
## akeys STEM
## List the keys in the associatve array named STEM.
akeys () {
  eval "echo \"\$__aa__${1}\""
}
## aget STEM KEY VAR
## Set VAR to the value of KEY in the associative array named STEM.
## If KEY is not present, unset VAR.
aget () {
  eval "unset $3
        case \$__aa__${1} in
          *\" $2 \"*) $3=\$__aa__${1}__$2;;
        esac"
}
## aset STEM KEY VALUE
## Set KEY to VALUE in the associative array named STEM.
aset () {
  eval "__aa__${1}__${2}=\$3
        case \$__aa__${1} in
          *\" $2 \"*) :;;
          *) __aa__${1}=\"\${__aa__${1}}$2 \";;
        esac"
}
## aunset STEM KEY
## Remove KEY from the associative array named STEM.
aunset () {
  eval "unset __aa__${1}__${2}
        case \$__aa__${1} in
          *\" $2 \"*) __aa__${1}=\"\${__aa__${1}%%* $2 } \${__aa__${1}#* $2 }\";;
        esac"
}

(경고, 테스트되지 않은 코드. 구문 상 유효하지 않은 스템 및 키에 대한 오류 감지는 제공되지 않습니다.)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

연관 배열-자바 스크립트

분류에서Dev

Google Colab의 셸 스크립트에서 명령 문자열 연결

분류에서Dev

배열의 공백과 줄 바꿈 (셸 스크립트)

분류에서Dev

배시 셸, 배관 후 연관 배열이 비어 있음

분류에서Dev

Bash 스크립트의 연관 배열 문제

분류에서Dev

연관 배열 자바 스크립트의 검색 값

분류에서Dev

쉘 스크립트의 배열 연결

분류에서Dev

연관 배열 내의 연관 배열

분류에서Dev

다른 셸의 다른 Python 스크립트에서 Python 스크립트 열기

분류에서Dev

자바 스크립트 객체 값을 자바 스크립트의 연관 배열로 복사

분류에서Dev

자바 스크립트 : 연관 배열의 루핑을 이해하지 못함

분류에서Dev

자바 스크립트에서 객체의 연관 배열 정렬

분류에서Dev

연관 배열의 트리

분류에서Dev

Bash 셸 스크립트 배열 길이가 1만큼 꺼짐

분류에서Dev

자바 스크립트, 기본 연관 배열

분류에서Dev

자바 스크립트 연관 동적 배열

분류에서Dev

AWS s3의 배포를위한 셸 스크립트

분류에서Dev

연관 배열 차이가있는 자바 스크립트 배열

분류에서Dev

openscad의 연관 배열?

분류에서Dev

자바 스크립트의 슬라이스 배열 및 연결

분류에서Dev

연관 배열 PHP의 Findind 배열

분류에서Dev

연관 배열의 배열 키 수정

분류에서Dev

(node) js의 '연관 배열'배열

분류에서Dev

(node) js의 '연관 배열'배열

분류에서Dev

연관 배열의 배열 정렬

분류에서Dev

배열의 다차원 연관 배열

분류에서Dev

쌍 / 튜플을 다중 값 키 / 인덱스로 사용하는 자바 스크립트의 연관 배열

분류에서Dev

자바 스크립트 연결 배열

분류에서Dev

Windows 10의 Linux 셸 (.sh) 스크립트를 Bash 또는 WSL에 연결

Related 관련 기사

뜨겁다태그

보관