Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash의 연관 배열로 데이터 제어

쉘 스크립트, Python 스크립트, C++, 스크래치 등 코드를 작성한 적이 있다면 변수가 중요하다는 것을 알고 있습니다. 컴퓨터와 코더는 변수를 웨이스테이션으로 사용하여 은밀하게 정보를 앞뒤로 전달합니다. 예를 들어, 쉘 스크립트에서 사용자 이름을 처리해야 하는 경우 변수를 설정하고 사용자 이름을 변수에 입력한 다음 컴퓨터에 변수에 대해 작업을 수행하도록 지시할 수 있습니다(인증된 사용자 목록과 비교하여 확인 , 예를 들어). 변수는 코드를 동적으로 활성화하기 때문에 중요합니다. 코드를 실행할 때마다 변경될 것으로 예상되는 정보의 자리 표시자입니다.

그러나 변수는 너무 흔하기 때문에 다소 다루기 어려워질 수도 있습니다. 종종 코드 프로젝트에서 너무 많은 변수를 수집하여 모든 변수를 추적하는 것이 거의 불가능합니다. 모든 관련 변수에 공통 문자열(user_name, user_pass, user_time 등)을 접두사로 붙이는 것과 같은 영리한 규칙을 사용하거나 쉽게 참조할 수 있도록 어딘가에 마스터 목록을 만들 수 있지만 추적하는 데 드는 오버헤드 모두 세금이 부과될 수 있습니다.

이 문제에 대한 한 가지 답은 전통적으로 어레이였습니다. 이것들은 Bash와 같은 쉘 스크립팅 언어를 포함한 대부분의 코딩 언어에서 잘 작동했습니다.

대부분의 셸은 인덱스 배열을 생성, 조작 및 쿼리하는 기능을 제공합니다. 일반 영어에서 인덱스 배열은 숫자가 접두사로 붙은 항목의 목록입니다. 이 목록은 할당된 번호와 함께 단일 변수로 편리하게 래핑되어 코드에서 쉽게 "이동"할 수 있습니다.

그러나 Bash에는 연관 배열을 생성하는 기능이 포함되어 있으며 이러한 배열을 다른 배열과 동일하게 취급합니다. 연관 배열을 사용하면 번호가 매겨진 값 대신 키와 값 쌍의 목록을 만들 수 있습니다.

임의의 키에 값을 할당할 수 있습니다.

$선언 -A userdata
$ userdata[name]=set
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`날짜 --utc +%s`

아무 키나 쿼리:

$ echo "${userdata[name]}"
set
$ echo "${userdata[로그인]}"
1583362192

배열에서 기대할 수 있는 대부분의 일반적인 배열 작업을 사용할 수 있습니다. 예를 들어 모든 값을 나열할 수 있습니다.

$ echo "${userdata[*]}"
8eab07eb620533b083f241ec4e6b9724 seth 1583362192

전체 배열을 볼 수 있습니다.

$ 조판 -A
선언 -A BASH_ALIASES='()'
선언 -A BASH_CMDS='()'
선언 -A userdata='([pass]="8eab07eb620533b083f241ec4e6b9724 "
[이름]="세트"
[로그인]="1583362192" )'

unset을 사용하여 배열에서 항목을 제거할 수도 있습니다. 명령:

$ unset userdata[pass]
$ typeset -A
[...]
declare -A userdata='([name]="seth"
[로그인 ]="1583362192" )'

마지막으로 전체 배열을 닫을 수 있습니다.

$ unset "userdata[*]" 

데이터 배열

배열은 관련 데이터를 함께 저장하는 데 유용한 도구입니다. 대부분의 경우 일반 이전 변수를 사용할 수 있지만 데이터를 통합하고 색인화한 상태를 유지하기 위해 단일 데이터 "객체"의 속성을 배열에 저장하는 것이 더 논리적인 경우가 있습니다. 예를 들어 utmp에서 가져온 로그인 이름과 시간을 처리하는 경우 , 연결하는 것이 더 유용할 것입니다. 두 개의 데이터 개체를 명백한 연결 없이 별도의 변수로 저장하는 것이 아니라 시간이 참조한 사용자와의 로그인 시간입니다.

또한 변수와 달리 배열의 항목은 데이터를 저장하기 전에 존재할 필요가 없습니다. 저장하기 전에 저장될 데이터의 양을 정확히 알 필요는 없습니다. 제어하거나 예측할 수 없는 데이터를 처리하는 경우 큰 이점이 될 수 있습니다. utmp에서 예상하는 사용자 수를 모르는 경우 언젠가는 모든 항목을 포함하는 스크립트를 작성하기가 어렵습니다. 하지만 배열을 사용하면 하나의 배열을 선언하고 데이터를 읽어서 수집할 데이터가 다 떨어질 때까지 새로운 키와 값 쌍을 생성하기만 하면 됩니다.

배열은 강력하며 Bash 이외의 프로그래밍 언어에서 일반적입니다. 지금 바로 사용하세요!