【问题标题】:Dynamically changing variable name in unix through for loop通过for循环动态改变unix中的变量名
【发布时间】:2016-02-07 17:16:24
【问题描述】:
Today=$(date)
for i in {2..15}
do
 week_{$i}=$(date -d "$Today +$i week")
 echo ${week_2}
done

我在 BASH 的输出中没有得到任何值。

【问题讨论】:

  • 一个容易发现的错误是“Today=$date”,它将变量“date”的值分配给名为“Today”的变量。尝试 Today=$(date);echo $Today 作为开始。
  • 我依稀记得for循环打开了一个子shell,任何变量都是该子shell的本地变量,没有办法在父shell中设置这些值.
  • no-way 除了将值放在文件(或管道??)中然后提取它们。
  • @Starkeen 看起来您的编辑中有错字。将“Today=$date for i in {2..15} do”放在一行中会产生语法错误。应该是 2 行或一个“;”在“为”之前。
  • 和“do”之前的另一个换行符或分号

标签: unix for-loop dynamic-variables


【解决方案1】:

一种方式...

今天=$(日期) 对于我在 {2..15} 做 tmp=$(date -d "$Today +$i week") 评估周_${i}=\$tmp 评估回声 \$week_${i} 完毕

第二种方式...

今天=$(日期) 对于我在 {2..15} 做 week_[$i]=$(date -d "$Today +$i week") 回声 ${week_[$i]} 完毕 第三种方式...
    Today=$(date)
    for i in {2..15} 
    do
        eval echo \${week_${i}:=$(date -d "$Today +$i week")} > /dev/null
    done

    for i in {2..15} 
    do
        eval echo  \$week_${i}
    done

【讨论】:

  • 你能解释一下吗?我不是 bash 的新手,但我大多只是使用它。将变量赋值从循环内部转移到外部,我永远无法管理,我尝试了一下。这是一个while循环,但我不敢相信“for”可能会有很大不同。
  • 在此示例中,变量在循环后可用。请参阅“第三条路”中的第二个循环。
猜你喜欢
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多