2016-02-07 81 views
1
Today=$(date) 
for i in {2..15} 
do 
week_{$i}=$(date -d "$Today +$i week") 
echo ${week_2} 
done 

我在BASH中没有获得输出值。动态更改unix中的变量名称for循环

+0

一个错误容易被发现为 “今日= $日期”,这受让人变量“date”的值**赋予名为“Today”的变量。尝试*今日= $(日期);回声$今日*开始。 –

+0

我依稀记得for循环打开了一个子shell,并且任何变量都是该子shell的本地变量,* no way *在父shell中设置这些值。 –

+0

* no-way *除了将值放在一个文件(或一个管道??)中并在之后提取它们。 –

回答

1

一种方式...

 
    Today=$(date) 
    for i in {2..15} 
    do 
     tmp=$(date -d "$Today +$i week") 
     eval week_${i}=\$tmp 
     eval echo \$week_${i} 
    done 

方式二...

 
    Today=$(date) 
    for i in {2..15} 
    do 
     week_[$i]=$(date -d "$Today +$i week") 
     echo ${week_[$i]} 
    done 
第三条道路...

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 
+0

可否请您解释一下?我不是什么新手,但我大部分都是*使用*它。将循环内部的变量赋值传递到外部,我无法管理,并且我尝试了一下。这是一段时间的循环,但我可以“相信”“可能会有很大的不同。 –

+0

这个工程!谢谢 – user5705451

+1

在这个例子中循环后可用的变量。以“第三种方式”参见第二个循环。 –