2013-05-14 4 views
0

У меня есть список, отформатированный, как показано ниже. Если я заменил список, скажем, «aaa bbb ccc», все будет хорошо. Любая идея?BASH: чтение цикла списка, создающего динамический массив

list=$(echo -e "1.1 1.2 mgmt") 

n=0 
for i in $list; do 
    let "array1_$i[$n]=$(date "+%N")" 
    ((++n)) 
done 

n=0 
for i in $list; do 
    var=array1_$i[$n] 
    echo ${!var} 
    ((++n)) 
done 

заранее спасибо за любые идеи ...

ответ

1

Вы можете изменить хижину строку

#!/bin/bash -xv 

, чтобы увидеть, что Баш пытается бежать. Фактически, вы пытаетесь создать переменную с именем array1_1.1, которая не является допустимым именем переменной: точки не разрешены.

+0

Я поражен полезность этой информации. Я могу * видеть *, что bash пытается запустить? UPVOTE. (При исследовании, -xv также работает для 'dash' (моя привилегированная оболочка для скриптов, которые должны выполняться очень быстро),' zsh', 'ksh' и, возможно, все остальные основные sh-варианты.) – kampu

1

. не является допустимым символом в идентификаторе.

man bash:

 
     name A word consisting only of alphanumeric characters and underscores, and 
       beginning with an alphabetic character or an underscore. Also 
       referred to as an identifier 
Смежные вопросы