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

Я не получаю никаких значений на выходе в BASH.Динамически меняющееся имя переменной в unix through for loop

+0

Одна ошибка легко обнаружить в "Сегодня = $ дата", которая присваивает значение ** переменной «дата» ** для переменной с именем «Сегодня». Попробуйте * Сегодня = $ (дата); echo $ Сегодня * для начала. –

+0

Я слабо помню, что for-loop открывает под-оболочку, и любая переменная является локальной для этой под-оболочки и * no way * для установки этих значений в родительской оболочке. –

+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

Не могли бы вы немного объяснить? Я не новичок в bash, но я в основном просто * использовал * его. Передавая присваивания переменных изнутри цикла вовнутрь, я никогда не мог справиться, и у меня были некоторые попытки. Это был цикл while, но я могу «поверить» в «может быть очень другим. –

+0

это работает !! Спасибо – user5705451

+1

В этом примере переменные доступны после цикла. См. Второй цикл в «Третий путь». –

Смежные вопросы