n 반복을 기반으로 루프 변수까지 n 변수를 파생시키는 Bash 스크립트가 작동하지 않습니다.

n 반복을 기반으로 루프 변수까지 n 변수를 파생시키는 Bash 스크립트가 작동하지 않습니다.

Bash 스크립트에 다음과 같은 문제가 있습니다.

스크립트를 실행하면 얼마나 많은 날짜 항목이 발생해야 하는지 묻는 Zenity 팝업 상자가 열립니다. 예를 들어 3을 입력하면 날짜 입력을 요청하기 위해 추가로 3개의 Zenity 상자가 차례로 열립니다.

$tvar이를 통해 두 개의 변수( 및 ) 를 생성할 수 있습니다 $date_entry_number. $date_entry_number입력된 날짜의 양을 캡처하고 $tvar입력된 모든 날짜를 공백으로 구분하여 캡처합니다. $date_entry_number= 3 의 경우 $tvar= 일 수 있습니다 '2020-07-02' '2020-07-03' '2020-07-04'.

내가 하려는 일은 의 개별 날짜를 포함하는 변수를 만드는 것입니다 $tvar. 예를 들어 숫자가 될 수 있는 $tvar1='2020-07-02' $tvar2='2020-07-03' $tvar3='2020-07-04'기준이 있습니다 . $date_entry_number이는 에 날짜가 얼마든지 있을 수 있음을 의미합니다 $tvar.

내 생각에는 아래 스크립트에서 볼 수 있듯이 for 루프가 필요하다고 생각하지만 이를 올바르게 수행하는 방법을 잘 모르겠습니다. 누군가 도와주실 수 있나요?

#!/bin/bash

date_entry_number="$(zenity --entry --text "ENTER number of date_entries:" --entry-text "1")"
        a=1 

tvar=$(until
        [[ $date_entry_number -lt $a ]]
do

date_out="$(zenity --calendar \
--title="Select a Date" \
--text="Click on a date to select that date." \
--date-format="'%G-%m-%d'")"

var="${date_out}"

echo $var

let a++

done)

echo $tvar
echo $date_entry_number

for i in {1..$date_entry_number}
do

        nvar{1..$tvar}

done

echo $nvar{1..$tvar}

답변1

다음과 같은 변수를 생성하는 것이 가능 tvar1하지만 bash에는배열이는 전반적으로 더 나은 접근 방식입니다. tvar각 날짜를 항목으로 포함하는 배열을 만드는 방법은 다음과 같습니다 .

#!/bin/bash    
date_entry_number="$(zenity --entry --text "ENTER number of date_entries:" --entry-text "1")"

tvar=()
a=1
until [[ $date_entry_number -lt $a ]]
do
    tvar+=("$(zenity --calendar \
        --title="Select a Date" \
        --text="Click on a date to select that date." \
        --date-format="'%G-%m-%d'")")
    let a++
done

# Show what's in the array
declare -p tvar

# Loop through the indices of the array
for i in "${!tvar[@]}"
do
    echo "date $i = ${tvar[i]}"
done

위에서 tvar=()는 이라는 배열을 만듭니다 tvar.

tvar+=(...)괄호 안에 있는 내용을 array 의 끝에 추가합니다 tvar. 이를 사용하여 입력된 각 새 날짜를 추가합니다.

Bash는 ${!tvar[@]}배열 목록으로 확장됩니다.지수. 만약 i색인위의 코드에서와 같이 배열에서 해당 값에 액세스할 수 있습니다. ${tvar[i]} 배열 목록을 원했습니다.가치, 우리는${tvar[@]}

man bashBash 배열의 여러 가지 강력한 기능에 대한 자세한 내용은 제목이 붙은 섹션을 참조하세요 Arrays.

관련 정보