Простой скрипт, который не работает должным образом.Я потратил много времени, пытаясь найти правильную комбинацию экранирования и цитирования, чтобы заставить его работать, но я пока не добился успеха.
У меня есть массив в K, который я хочу перебрать из встроенного сценария ожидания.
send_user '${list[4]}'
работает должным образом, печатая четвертый элемент массива на консоли.
Зацикливание операторов:
incr i 1
send_user "\$i"
работает должным образом, печатаяувеличение значения интергера 12345 ... и т. д.
Но, вот фокус.
send_user "${list[$i]}"
НЕ работает.Независимо от значения $i
, он всегда возвращает первый элемент массива, я не могу выполнить цикл через массив.
Да, я знаю о экранировании $
с обратной косой чертой и разнице междуэффекты одинарных и двойных кавычек и т. д. Я пробовал каждую комбинацию.Как я уже говорил, часы и часы.Я получаю либо ошибку, либо ничего, либо первый элемент массива (как в примере) без учета фактического значения $i
.
Я также пытался переместить массив непосредственно в ожидаемую часть сценария.как в виде ассоциативного массива, так и в виде списка.Нада.Проблема заключается не в чтении данных в массиве, а в извлечении этого массива или списка данных во встроенном коде ожидания с использованием переменной, а не дискретного числа.
Прежде чем отказаться от этого подхода и переписать длинный и сложныйинструмент тестирования другим способом, я думал, что я обращусь к собравшимся множествам.
Я встраиваю демонстрационный тестовый сценарий ниже.
Спасибо всем за любые предложения.
Натан
$ cat test24.sh
list=(zero one two three four)
expect <<- EXPECT_DONE
exp_internal 1
send_user '${list[4]}'
set i 0
send_user "\$i"
send_user "${list[$i]}"
incr i 1
send_user "\$i"
send_user "$list[$i]"
incr i 1
send_user "\$i"
send_user "${list[ "$i" ]}"
incr i 1
send_user "\$i"
send_user ${list[$i]}
incr i 1
send_user "\$i"
send_user "${list[$i]}"
send_user ${list[4]}
send_user "\n"
EXPECT_DONE
echo "Script done."
$ ./test24.sh
'four'0zero1zero2zero3zero4zerofour
Script done.