Linux shellscript从文件中读取变量

Linux shellscript从文件中读取变量,linux,shell,unix,Linux,Shell,Unix,我不熟悉shell脚本。我正在从事一个项目,其中的需求就像一个脚本文件将设置变量,而另一个脚本文件必须获取这些变量并对其进行操作。我将第一个脚本中的变量存储到一个文件中,并在第二个脚本文件中读取它 在第一个脚本文件first.sh中,我做了如下操作 echo "a=6" > test.dat echo "b=7" >> test.dat echo "c=8" >> test.dat 我将用于它覆盖的第一个变量和它附加的下一个值。因此,文件将始终具有最新的值 还有比

我不熟悉shell脚本。我正在从事一个项目,其中的需求就像一个脚本文件将设置变量,而另一个脚本文件必须获取这些变量并对其进行操作。我将第一个脚本中的变量存储到一个文件中,并在第二个脚本文件中读取它

在第一个脚本文件first.sh中,我做了如下操作

echo "a=6" > test.dat
echo "b=7" >> test.dat
echo "c=8" >> test.dat
我将
用于它覆盖的第一个变量和它附加的下一个值。因此,文件将始终具有最新的值

还有比这更好的方法吗


在第二个脚本文件中,如何读取和填充适当的值?

您可以使用
源代码
从脚本加载此变量:

source test.dat
或者只是

. test.dat
例如:

$ echo "a=6" > test.dat ; echo "b=7" >> test.dat ; echo "c=8" >> test.dat
$ cat test.dat 
a=6
b=7
c=8
$ . test.dat
$ echo $a $b $c
6 7 8
$ cat generate.sh
echo a=6
echo b=7
echo c=8

$ bash generate.sh 
a=6
b=7
c=8

$ eval $(bash generate.sh)
$ echo $a $b $c
6 7 8
如果您有生成这些变量的脚本/程序,也可以使用
eval

例如:

$ echo "a=6" > test.dat ; echo "b=7" >> test.dat ; echo "c=8" >> test.dat
$ cat test.dat 
a=6
b=7
c=8
$ . test.dat
$ echo $a $b $c
6 7 8
$ cat generate.sh
echo a=6
echo b=7
echo c=8

$ bash generate.sh 
a=6
b=7
c=8

$ eval $(bash generate.sh)
$ echo $a $b $c
6 7 8

要读取第二个脚本中的变量,只需将其源代码(导入)即可:


在编写文件方面,有不同的方法。哪个更好取决于许多因素。一种常见的方法是使用heredoc:

cat > test.dat << EOF
a=6
b=7
c=8
EOF

cat>test.dat总是有修改的机会,编写变量文件的方法很好。您仍然可以按如下方式更改此设置:

echo-e“a=6\nb=7\nc=8”>test.dat

要通过脚本读取变量文件,可以添加以下内容:

源测试.dat

(我的建议:-)

。test.dat


另一种看起来稍微整洁的方法是
{echo a=6;echo b=7;echo c=8}>test.dat
或单个printf命令:
printf%s=%s\n“a 6 b 7 c 8>test.dat
@NormanGray,在大括号后面需要一个空格,最后一个echo命令必须以分号结尾--.@glennjackman说得对。我用
zsh
对它进行了测试——bash和sh显然更复杂。@Igor,好的,我打开了fiel test.dat并读取了我想要的变量,但之后我可以关闭这个test.dat文件并返回到脚本文件,然后恢复当前脚本文件的剩余会话。或者没有必要。