loops - Zsh 行为直到循环变量行为
问题描述
#!/bin/zsh
sqlday0="2020-10-10"
sqlday1="2020-10-11"
sqlday2="2020-10-13"
sqlday3="2020-10-14"
sqlday5="2020-10-15"
sqlday6="2020-10-16"
i=0
until [[ $i -gt 5 ]] do
var1=\$sqlday$i
echo $var1
echo "$sqlday0"
((i=i+1))
done
终端:
$sqlday0
2020-10-10
$sqlday1
2020-10-10
$sqlday2
2020-10-10
$sqlday3
2020-10-10
$sqlday4
2020-10-10
$sqlday5
2020-10-10
我的目标是通过 $sqlday0、$sqlday1...等循环并输出分配给变量的相应日期。但是为什么 shell 不返回每个变量 $sqlday[0-5] 作为每个相应的日期?当我回显“$sqlday0”时,它引用了全局变量,但循环出现了问题——为什么会这样,我该如何让它工作?我只是手动 echo'd $sqlday0 因为我不确定为什么 echo $var1 没有在循环中检索日期。
解决方案
在你的循环中,你正在做一个
echo "$sqlday0"
这意味着您总是打印同一个变量的值,sqlday0
. 由于您从不更改此变量的内容,因此我不明白为什么您期望每次迭代都有不同的值。
循环内的变化是 的内容,所以如果你做var1
echo ${(P)var1}
您将在每次迭代中看到不同的 sqlday-values。或者当然更好的解决方案是使用数组sqlday 而不是标量,这样您就可以通过 引用各个天$sqlday[$i]
,这也避免了使用辅助变量var1
进行间接引用的需要。
推荐阅读
- kibana - kibana vega(公式)转换的对象导致空白页
- json - 在 JSON Schema 中使用对象键作为类型
- twitter - 无法从 twitter 获取授权令牌
- clojure - 如何使用幽灵合并两个不同的集合?
- mysql - Convertint millisecond to date
- c# - 在另一个控件中显示/隐藏控件
- java - 如何将 Opneshift 配置映射文件添加到内置于 tomcat 的 Spring Boot Web
- django - 使用发布请求从 Django 网站中的数据库登录/检查用户名和密码
- python - 如何生成总和等于特定数字的 15 个随机数
- python - Python-if语句下的多个条件