Bash - 我怎样才能执行一个变量
Bash - How can I execute a variable
我正在读取一个包含以下行的文件:
folder=abc
name=xyz
对于某些行,我想设置一个变量,例如 name=xyz
对应于我已阅读的行。
用 name=xyz
和 folder=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
我正在读取一个包含以下行的文件:
folder=abc
name=xyz
对于某些行,我想设置一个变量,例如 name=xyz
对应于我已阅读的行。
用 name=xyz
和 folder=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