Bash - 我怎样才能执行一个变量

Bash - How can I execute a variable

我正在读取一个包含以下行的文件:

folder=abc
name=xyz

对于某些行,我想设置一个变量,例如 name=xyz 对应于我已阅读的行。

name=xyzfolder=abc 减少它,我试过:

while read -r line; do
    $line
    echo $name
done < /etc/testfile.conf

这会给出一条错误消息 ./test: line 4: folder=abc: command not found

我试过"$line"$($line)都是一样的。有没有可能做我想做的事?

我已经成功了:

while read -r line; do
    if [[ "$line" == 'folder'* ]]; then
        folder="$(echo "$line" | cut -d'=' -f 2)"
    fi
    if [[ "$line" == 'name'* ]]; then
        name="$(echo "$line" | cut -d'=' -f 2)"
    fi
done < /etc/testfile.conf

但这看起来很乱

直接方法,使用eval.

不同的方法,尝试使用 source.:

$ echo "$line"
folder=abc
$ . <(echo "$line")
$ echo "$folder"
abc

但也许好的答案是以不同的方式解决问题。

对于您的样本,declare 是最安全的选择:

while read -r line; do
  declare "$line"
done
$ echo "$folder"
abc
$ echo "$name"
xyz

您可以稍微清理一下您的方法,而无需求助于 eval

while IFS="=" read -r name value; do
    case $name in
        folder) folder=$value ;;
        name) name=$value ;;
    esac
done < /etc/testfile.conf

为什么不只有源文件?

$ . infile ; echo "$name"
xyz