2013-06-26 2 views
0

Я пишу скрипт в bash, и я пытаюсь читать из массива. Когда я перебирать массив с кодом ниже:Bash: Чтение из массива

for item in "${!functionDict[@]}" 
do 
    echo "{ $item : ${functionDict[$item]} }" >> array.txt 
done 

выводит (в «array.txt»):

{ month_start_date($year_selected, $month_selected) : return $date; } 
{ logWarning($message) : return logEvent($message, $c_event_warning); } 
{ daysPastLastQuarterX($curYear, $curMonth, $curDay, $selected_year, $selected_quarter, $nDays) : return false;:return false;:return false;:return false;:return true;:return $delta > $nDays; } 
{ setExcelLabelCell($sheet, $cell, $label, $width) : } 
{ asCurrencyString($value) : return formatCurrency($value); } 
{ getNumericMonthName($m) : return $numericMonth; } 
{ normalize_for_PDF(&$text) : } 

Однако у меня возникают проблемы-опрос отдельных элементов из массива.

Я попытался:

string='month_start_date($year_selected, $month_selected)' 
echo "test_output: ${functionDict[$string]}" 

, но я получаю

test_output: <blank> 

Я также попытался вставить некоторые RegEx подстановочные знаки, в случае, если есть некоторые пробелы вокруг ключа ,

echo 'size of array: '"${#functionDict[@]}" 
echo "TEST: functDict[logWarning] = ${functionDict[.*'logWarning($message)'.*]}" 

я

size of array: 157 //I didn't copy/paste all the elements in the array in this post 
TEST: functDict[logWarning] = <blank> 

Увы, я застрял. Содержимое, которое я пытаюсь вернуть, - это элементы «return _» или просто «пустые» для ключей, у которых нет никаких «возвратных» элементов.

+4

что, если вы пытаетесь с 'строки =«month_start_date ($ year_selected, $ month_selected)»' (с пробелом перед 'month_start_date')? кажется, у вас есть ведущее место в ваших ключах ... –

+0

Он работает здесь: http://ideone.com/zynNIv – perreal

+0

@perreal: конечно, он работает для вас, у вас нет ведущего места в ваших ключах , –

ответ

0

Кредиты для ответа идут на @gniourf_gniourf. (См. Комментарии)

На всех ключах, которые я не включил в свои тестовые запросы, было дополнительное ведущее место.

(предоставление ответа здесь, чтобы люди знали этот вопрос был решен. Надеемся, что это нормально практика на SO)