获取变量的名称作为输入,并使用该名称更改变量

时间:2008-12-16 21:43:05

标签: bash

我从脚本用户那里得到一个变量的名称作为第一个参数,我将所述变量的值回显给控制台:

#!/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 个答案:

答案 0 :(得分:7)

在寻求帮助后几分钟我突然闪过,我想我有一个解决方案:

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

有效。还有更好的方法吗?

答案 1 :(得分:2)

您的解决方案将有效,但变量只会在您的脚本中具有该值。它不会影响“调用”应用程序的变量。

当您运行脚本或程序时,它会生成一个带有环境副本的新shell。这是设计使您的脚本不会修改PATH

之类的内容

如果您希望脚本能够修改调用shell的环境变量,则需要source scriptname. scriptname。这就是.bashrc的工作原理。