变量的复杂初始化

变量的复杂初始化

我有一个脚本如下:

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,其他 shell 不支持数组的数组),请在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]}

相关内容