Inicialização complexa de variáveis [closed]

0

Eu tenho um script como segue:

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  

Eu realmente não gosto disso, porque se eu tiver outro caso, a inicialização se torna mais e mais longa.
Como tais casos podem ser escritos de forma mais elegante?

    
por Jim 31.10.2017 / 09:59

2 respostas

3

Se você usar uma matriz de valores em vez de variáveis individuais, a inicialização será mais bonita:

#!/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
    
por 31.10.2017 / 12:26
2

Não tenho certeza do problema que você está tentando resolver exatamente, mas se você quiser ter os valores dos vários casos codificados em uma matriz de matrizes associativas (para as quais você precisa de ksh93, outras shells não suportam matrizes de matrizes) ), em ksh93 você poderia fazer algo como:

#! /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]}
    
por 31.10.2017 / 13:12