Страницы

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

воскресенье, 12 января 2020 г.

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

#linux #bash


Скрипт:

#!/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


возвращает ошибку.

Как реализовать присвоение значений заранее заданным переменным?
    


Ответы

Ответ 1



если запустить ваш скрипт, получаем ошибки в девятой строке (содержащей ${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 что, вероятно, и ожидается.

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

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