bash 스크립트 - 다른 배열의 값을 기반으로 한 배열의 값을 인쇄합니다.

bash 스크립트 - 다른 배열의 값을 기반으로 한 배열의 값을 인쇄합니다.

두 개의 배열이 있고 ARRAY1의 해당 값을 기반으로 ARRAY2의 값을 인쇄하고 싶습니다.

#!/usr/bin/env bash

ARRAY1=(bb.service.sql bw.service.sql)
ARRAY2=(bb bw)

case $ARRAY1[@] in

  ${ARRAY1[1]})
    echo ${ARRAY2[1]} ;;

  *)
    echo "unknown" ;;
esac

하지만 난 아직 unknown여기까지 오는 중이야. 내가 뭘 잘못했나요?

답변1

$ARRAY1${ARRAY1[0]}bashin (ksh에서 복사한 이상한 디자인) 의 약어입니다 .

$ARRAY1[@]와 동일 ${ARRAY[0]}[@]하므로 인덱스 0에 있는 요소의 값 뒤에는 리터럴이 옵니다 [@]. 많은 언어와 많은 셸( csh배열이 있는 첫 번째 셸 부터 시작)에서 $array[1]ksh와 마찬가지로 bash에서 배열을 인덱싱할 수 있지만 이렇게 해야 합니다 ${array[1]}. 이는 배열이 없는 Bourne 쉘과의 하위 호환성을 유지하기 위해 수행됩니다.

${array[@]}배열의 모든 요소로 확장되지만 여기서는 case문자열만 일치하므로 요소는 공백으로 연결되어 case일치됩니다.

또한 배열을 할당할 때 array=(foo bar)1 이 아닌 를 foo입력하십시오 ${array[0]}(ksh와 동일하지만 array=(values...)이 구문의 소스인 zsh를 포함한 대부분의 다른 쉘과 달리).

어쨌든, 당신이 그것으로 무엇을 하고 싶은지 명확하지 않습니다.

bb에 매핑하고 싶을 수도 있습니다 bb.service.sql. 이 경우 연관 배열을 사용하는 것이 좋습니다.

#! /bin/bash -
typeset -A map=(
  [bb]=bb.service.sql
  [bw]=bw.service.sql
)
first_parameter=${1?}
corresponding_sql=${map[$first_parameter]?}

( ?변수를 설정하지 않으면 에러가 발생합니다.)

관련 정보