
Bash スクリプトで次の問題が発生します。
スクリプトを実行すると、Zenity ポップアップ ボックスが開き、日付の入力回数を尋ねられます。たとえば 3 を入力すると、さらに 3 つの Zenity ボックスが (次々に) 開き、日付の入力を求められます。
$tvar
これにより、2 つの変数 (および)を生成できます$date_entry_number
。$date_entry_number
は入力された日付の数を取得し、 は$tvar
空白で区切られた、入力されたすべての日付を取得します。 = 3 の場合$date_entry_number
、$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+=(...)
括弧内の内容を配列の末尾に追加しますtvar
。これを使用して、新しい日付が入力されるたびに追加します。
Bashは${!tvar[@]}
配列のリストに展開しますインデックス.i
が索引配列では、上記のコードのように、対応する値にアクセスできます。${tvar[i]}
配列のリストが必要でした。価値観、私たちは${tvar[@]}
bash 配列の多くの強力な機能の詳細については、man bash
「」のセクションを参照してくださいArrays
。