변수의 복잡한 초기화 [닫기]

변수의 복잡한 초기화 [닫기]

다음과 같은 스크립트가 있습니다.

if [[ is_case1 -eq "1" ]]; then  
    VAR_A=$1  
    VAR_B=$2  
    VAR_C=$3  
    VAR_D=$4  

elif [[ is_case1 -eq "2" ]]; then   
   # initialize the variables here with specific logic 
   VAR_A=…  
    VAR_B=…  
    VAR_C=…  
    VAR_D=…  
else  
  # initialize the variables here with specific logic 
   VAR_A=…  
    VAR_B=…  
    VAR_C=…  
    VAR_D=…  
fi  

다른 케이스가 있으면 초기화가 점점 길어지기 때문에 저는 이것을 정말 좋아하지 않습니다.
이런 경우를 더 우아하게 작성하는 방법은 무엇입니까?

답변1

단일 변수 대신 값 배열을 사용하면 초기화가 더 예쁠 수 있습니다.

#!/bin/bash

# set default values:
values=( "val1" "val2" "val3" )  # or values=()

case "$somevalue" in
    1) values=( "$@" ) ;;                    # get values from command line
    2) values=( "some" "other" "values" ) ;; # use other values
    *) # other cases uses default values
esac

답변2

정확히 무엇을 해결하려고 하는지는 모르겠지만 연관 배열의 값 여러 사례를 인코딩하려는 경우(이를 위해서는 ksh93이 필요하며 다른 쉘은 배열 배열을 지원하지 않습니다) ksh93이것을 할 수 있습니다 :

#! /bin/ksh93 -
cases=(

         [1]=("$@")
         [2]=(foo 'x y' bar baz)
  [whatever]=(w x y z)
      [none]=()

)
values=(some default values)
[[ -v cases[$is_case1] ]] && values=("${cases[$is_case1][@]}")

# assign to separate variables if need be.
VAR_A=${values[0]}
VAR_B=${values[1]}
VAR_C=${values[2]}
VAR_D=${values[3]}

관련 정보