기본 콘텐츠로 건너뛰기

Bash Array, Map 정리

Bash에서 Array, Map에 대한 정리. (매번 찾기 귀찮)

찾아보진 않았지만, Bash에서 Array든 Map이든 동일하게 Map(C++에서 Unordered Map)으로 동작하는 것 같다.
왜냐하면, Array의 Index가 연속하지 않아도 동작한다. 그저 Key가 0 이상의 정수인 Map이랑 비슷하게 동작한다. 예) 1, 2, 3, 9, 10

Array

# 생성
declare -a empty_array
declare -a ar=(haha hoho baba "long string haha hoho")

# 접근
echo "ar[0]=${ar[0]}"

echo "all as array=${ar[@]}" # 큰따옴표 안에서 각 원소를 따로따로 전달한다.
echo "all as one=${ar[*]}" # 큰따옴표 안에서 각 원소를 문자열 하나로 합쳐 전달한다.

echo "indexes=${!ar[@]}"
echo "indexes=${!ar[*]}"

echo "length=${#ar[@]}"
echo "length=${#ar[*]}"

echo "last=${ar[-1]}"
echo "last=${ar[@]: -1}" # 콜론 뒤에 빈 칸이 꼭 필요하다. 옛 방식

# 현재 상황
declare -p ar
#(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho")

ar[100]=hello # 인덱스를 건너 뛰어도 동작한다.
declare -p ar
#(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho" [100]="hello")

ar[-1]=last # 마지막 원소에 대입한다.
declare -p ar
#(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho" [100]="last")

ar[-2]=whoami # 마지막 원소에서 왼쪽으로 한 칸 더 간다. 없는 인덱스이므로, 새로 만든다.
declare -p ar
#(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho" [99]="whoami" [100]="last")

# 추가
ar+=(blar)
ar+=(keke 123 456)
ar+=("long long long string" "another long long long string")

# 삭제
unset 'ar[3]' # 인덱스로 삭제

# 루프1: 골뱅이접근
# 원소를 각각 전달한다. 어지간하면 별표보다 골뱅이로만 쓰자.
for i in "${ar[@]}"; do
  echo "${i}"
done

# 루프2: 별표접근
# 원소를 문자열 하나로 뭉쳐서 한꺼번에 전달한다.
# 원하는 결과가 나오지 않는다... 아래 루프는 1회 돈다.
for i in "${ar[*]}"; do
  echo "${i}"
done

# 루프3: 인덱스로 접근
for i in "${!ar[@]}"; do
  echo "${i}=${ar[${i}]}"
done

Map

# 생성
declare -A empty_map
declare -A map=([hello]='world' [long]='long long long string' [what is it]=123)
declare -p map
#(출력) declare -A map=([long]="long long long string" ["what is it"]="123" [hello]="world" )

echo "map[hello]=${map[hello]}"
key=hello
echo "map[key]=${map[${key}]}"

echo "all=${map[@]}"
echo "keys=${!map[@]}"
echo "length=${#map[@]}"

# 추가
map+=([key1]=value)
map+=([key2]=value2 [key3]=value3)
map+=(['long key']='long long long value')
map['like a C++']='value!!!!!'

# 삭제
unset 'map[intput1]' # 키로 삭제

# 루프1: 골뱅이 접근
# 키를 알아낼 방법이 없다.
for i in "${map[@]}"; do
  echo "${i}"
done

# 루프2: 키로 접근
for key in "${!map[@]}"; do
  echo "map[${key}]=${map[${key}]}"
done

댓글

이 블로그의 인기 게시물

탐색기에서 OneDrive 이 2개로 보이는 문제

왜 2개가 보이는지 모르겠지만, Registry 삭제하면 됨 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace 하위 키에서 OneDrive 둘 중에 하나만 지워도 바로 반영됨. 참조:  https://answers.microsoft.com/en-us/msoffice/forum/all/duplicate-onedrives-in-file-explorer/49c935a6-287b-43a5-aed5-2dee2a1c1b22

버즈 라이브 배터리 교체

나는 버즈 라이브(SM-R180)가 좋은데, 평가가 별루였는지, 해당 스타일로 버즈를 더 이상 만들지 않고 있다. 아무튼, 오래 쓴 버즈 라이브 배터리가 슬슬 맛이 가기 시작해서, 블로그 를 참조하면서 분해 및 교체를 하였다. (진짜 쉬움) 요로코롬 위아래를 살짝 눌러주면 뚜껑이 벌어진다. 안쪽 플라스틱은 오른쪽은 분홍색, 왼쪽은 회색이다. 리본 케이블 살짝 들어내고, 기판을 떼어내면, 작은 나사가 있다. 나사를 풀고, 플라스틱을 걷어내면, 검은 양면 테이프로 고정된 CR1254 배터리가 보인다. 잘 쑤셔서(?) 꺼낸다. 새로운 CR1254 배터리를 넣는다. 음극이 아래로 가도록 하고, 분해의 역순으로 조립하면 된다. 조립할 때, 아까 풀었던 나사는 잊지 말고 꼭 조여준다. (까먹고 조립해서 다시 뜯고 조립함) 충전도 잘 되고, 소리도 잘 나는거 보면, 조립도 잘 된 것 같다. 이렇게 버즈 라이브의 수명을 강제로 늘렸다. 나중에 본체 배터리도 갈아야겠다.