Получить имя переменной в качестве входных данных и изменить переменную с этим именем - PullRequest
6 голосов
/ 17 декабря 2008

Я получаю имя переменной от пользователя скрипта в качестве первого аргумента и возвращаю значение этой переменной обратно в консоль:

#!/bin/bash
variablename=$1
echo "The value of $variablename is: " ${!variablename}

Это прекрасно работает!

Что я не могу заставить работать, так это если я хочу изменить эту переменную на значение второго аргумента от пользователя. Пример с синтаксической ошибкой:

#!/bin/bash
variablename=$1
echo "The value of $variablename is: " ${!variablename}
echo "I will now try to change the value into $2."
(!variablename}=$2
# The above line generates: {!variablename}=2: command not found

Другими словами: если это возможно, как я могу получить переменную name от пользователя и одновременно прочитать (уже решено) и записать в указанную переменную?

Ответы [ 2 ]

7 голосов
/ 17 декабря 2008

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

#!/bin/bash
variablename=$1
echo "The value of $variablename is: " ${!variablename}
echo "I will now try to change the value into $2."
eval "$variablename=$2"
echo "Success! $variablename now has the value ${!variablename}!"

Это работает. Есть ли лучший способ?

2 голосов
/ 17 декабря 2008

Ваше решение будет работать, но переменная будет иметь только это значение в вашем скрипте. Это не повлияет на переменную вызывающего приложения.

Когда вы запускаете скрипт или программу, она порождает новую оболочку с копией среды. Это сделано так, что ваш скрипт не изменяет такие вещи, как PATH.

Если вы хотите, чтобы ваш скрипт мог изменять переменные окружения для вызывающей оболочки, вам нужно либо source scriptname, либо . scriptname. Вот как работает .bashrc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...