Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-如何执行变量_Bash_Variables_Execute - Fatal编程技术网

Bash-如何执行变量

Bash-如何执行变量,bash,variables,execute,Bash,Variables,Execute,我正在读取一个文件,其中包含以下行: folder=abc name=xyz 对于某些行,我想设置一个变量,例如name=xyz,对应于我读到的行 将其缩减,使用name=xyz和folder=abc,我尝试了: while read -r line; do $line echo $name done < /etc/testfile.conf 但这似乎很混乱直接方法,使用eval 不同的方法,请尝试使用源或: 但可能最好的答案是以不同的方式解决问题。直接方法,使用eva

我正在读取一个文件,其中包含以下行:

folder=abc
name=xyz
对于某些行,我想设置一个变量,例如name=xyz,对应于我读到的行

将其缩减,使用name=xyz和folder=abc,我尝试了:

while read -r line; do
    $line
    echo $name
done < /etc/testfile.conf
但这似乎很混乱

直接方法,使用eval

不同的方法,请尝试使用源或:

但可能最好的答案是以不同的方式解决问题。

直接方法,使用eval

不同的方法,请尝试使用源或:

但可能最好的答案是以不同的方式解决问题。

对于您的示例,declare是最安全的选项:

while read -r line; do
  declare "$line"
done
对于您的样本,declare是最安全的选项:

while read -r line; do
  declare "$line"
done

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


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


为什么不仅仅是源de文件

$ . infile ; echo "$name"
xyz

为什么不仅仅是源de文件

$ . infile ; echo "$name"
xyz

你想执行什么/测试:第4行:folder=abc:command not found表示执行失败,因为没有这样的应用程序。真的很难说你在问什么。你似乎被设置为发现eval,然后希望尽快得出结论,重新定义你的问题可能比实际使用eval更好。@Flash Thunder,我正试图将variable文件夹设置为abc@oguz伊斯梅尔,这正是我想要的,而且很容易理解follow@Poshi,谢谢,它看起来很有效,但在我未经训练的眼里,oguz ismail的解决方案似乎更容易阅读。你想执行什么/测试:第4行:folder=abc:command not found表示执行失败,因为没有这样的应用程序。真的很难说你在问什么。你似乎被设置为发现eval,然后希望尽快得出结论,重新定义你的问题可能比实际使用eval更好。@Flash Thunder,我正试图将variable文件夹设置为abc@oguz伊斯梅尔,这正是我想要的,而且很容易理解follow@Poshi,谢谢,它看起来很有效,但在我未经训练的眼中,oguz ismail的解决方案似乎更容易阅读。eval是你与这样的朋友的朋友,谁需要敌人?eval是你与这样的朋友的朋友,谁需要敌人?文件实际上有点复杂。用xml类型标记划分为多个部分,我只需要每个部分中的几个值。谢谢这个文件实际上有点复杂。用xml类型标记划分为多个部分,我只需要每个部分中的几个值。谢谢
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