我在 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}
可以创建变量,
tvar1
但 bash 有数组,这是一种整体上更好的方法。以下是如何创建一个tvar
包含每个日期作为条目的数组:在上面
tvar=()
创建了一个名为tvar
.tvar+=(...)
将括号中的内容附加到 array 的末尾tvar
。我们使用它来附加每个输入的新日期。Bash 扩展
${!tvar[@]}
为数组索引列表。如果i
是数组中的索引,如上面的代码,我们可以访问相应的值${tvar[i]}
如果我们想要一个数组值的列表,我们将使用${tvar[@]}
有关 bash 数组的许多强大功能的更多信息,请参阅
man bash
标题为Arrays
.