변수를 변수로 사용

변수를 변수로 사용

variablenaam루프에서 사용할 변수를 사용하고 싶습니다 . 나는 몇 시간 동안 노력했지만 제대로 작동하지 못했습니다.

최신 Raspbian을 사용하여 RPi 4에서 bash 실험을 수행했습니다.

나는 루프에서 사용할 수 있도록 xstack1 및 xstack2 변수를 사용하는 것을 좋아합니다. 아래 예에는 루프에서 사용하고 싶은 두 개의 스택이 있으므로 변수를 만들어야 합니다 xstack<value> variable.

clear
xstack1=( domoticz dashboard dashticz nodered )
xstack2=( x y z )
printf "Original value xstack1[*]= ${xstack1[*]}"   # this gives all the entries of x, this must be the result at the end by choose for xstack1 = q=1

printf "\n\n Lets Start, try to make xstack variable"
q=1                     # we want tot retrieve all values of xstack1
qq=$(eval "echo xstack${q}") 
printf "\nvariablenaame of xstack1 = $qq"   # so far so good
printf "\n"


qqq=$(eval "echo $qq[*]")           #now add the all parameter
printf "\nvariablenaam with wildcard must do show all values but dont= $qqq"  #only one value
printf "\n\n"

qqqq=$(eval "echo \$$qqq")
printf "last try and does not work, i only get one value= ${qqqq}\n"

여기에 내가 사용하고 싶은 코드가 있습니다. stack1-4에 대해서도 비슷한 블록을 볼 수 있습니다. 제 생각에는 xstack1-4라는 변수 이름을 가진 블록일 것 같습니다. 이 xstack은 배열인데, 이것이 문제를 일으키는 것 같습니다. 블록은 완벽하게 작동하지만 완벽하게 작성되지는 않습니다 :-)

local t_maxkolom=9
local t_mitem=1
local t_stack=0
while [ $t_stack -lt $t_maxkolom ]
do  

    local t_gitem=0
    local t_sp='%31s'


    if [ -z "${stack1[$t_stack]}" ]; then printf $t_sp && printf "${normal}"; else
        printf "${number}  $((t_mitem + $t_gitem )))${normal} Toevoegen " && printf '%-16s' "${stack1[$t_stack]}" && printf "${normal}"
    fi

    local t_sp='%32s'
    local t_gitem=$((t_gitem + 10))

    if [ -z "${stack2[$t_stack]}" ]; then printf $t_sp && printf "${normal}"; else
        printf "${number}  $((t_mitem + $t_gitem )))${normal} Toevoegen " && printf '%-16s' "${stack2[$t_stack]}" && printf "${normal}"
    fi

    local t_sp='%32s'
    local t_gitem=$((t_gitem + 10))

    if [ -z "${stack3[$t_stack]}" ]; then printf $t_sp && printf "${normal}"; else
        printf "${number}  $((t_mitem + $t_gitem )))${normal} Toevoegen " && printf '%-16s' "${stack3[$t_stack]}" && printf "${normal}"
    fi

    local t_sp='%32s'
    local t_gitem=$((t_gitem + 10))

    if [ -z "${stack4[$t_stack]}" ]; then printf $t_sp && printf "${normal}\n"; else
        printf "${number}  $((t_mitem + $t_gitem )))${normal} Toevoegen " && printf '%-16s' "${stack4[$t_stack]}" && printf "${normal}"
    printf "\n"
    fi

    t_stack=$(( $t_stack + 1 ))
    t_mitem=$((t_mitem + 1))
done

이 코드를 사용하여 Docker 애플리케이션에 대한 메뉴 항목을 생성합니다.

여기에 이미지 설명을 입력하세요.

답변1

예를 들어, 이...

xstack1=( domoticz dashboard dashticz nodered )
xstack2=( x y z )

q=1
declare -n qq="xstack${q}"
qqq="${qq[*]}"
echo "q=[$q]"
echo "qq=[$qq]"
echo "qqq=[$qqq]"

이것을 생산한다

q=[1]
qq=[domoticz]
qqq=[domoticz dashboard dashticz nodered]

nameref를 배열로 명시적으로 선언해야 합니다.

관련 정보