Страницы

Поиск по вопросам

четверг, 7 марта 2019 г.

Косвенное присвоение значений переменным

Скрипт:
#!/bin/bash test1="" test2="" t_array=( "test1" "test2" )
index=$((${#t_array[@]}-1)) while [ $index -gt -1 ] do ${t_array[index]}="1" index=$(($index-1)) done
echo $test1 $test2
возвращает ошибку.
Как реализовать присвоение значений заранее заданным переменным?


Ответ

если запустить ваш скрипт, получаем ошибки в девятой строке (содержащей ${t_array[index]}="1"):
/tmp/s: line 9: test2=1: command not found /tmp/s: line 9: test1=1: command not found
т.е. сформированная строка интерпретируется как буквальное выполнение строки test2=1 как команды. такой команды, конечно, нет, о чём интерпретатор и сообщает.
судя по содержимому скрипта, в этом месте необходимо интерпретировать эту строку, чтобы она воспринималась интерпретатором как присвоение значения переменной. это можно сделать, например, добавив команду eval перед выражением, формирующим строку:
eval ${t_array[index]}="1"
тогда скрипт вернёт строку
1 1
что, вероятно, и ожидается.

Комментариев нет:

Отправить комментарий