Shell脚本:从文件中读取变量

3

我是新手shell脚本编程。我正在处理一个项目,要求是一个脚本文件设置变量,另一个脚本文件必须获取这些变量并操作它。我将第一个脚本中的变量存储到文件中,在第二个脚本文件中进行读取。

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

echo "a=6" > test.dat
echo "b=7" >> test.dat
echo "c=8" >> test.dat

我使用>符号来覆盖第一个变量的值,并在接下来的值中追加。因此,文件中始终具有最新的值。

是否有比这更好的方法?

在第二个脚本文件中,如何读取和填写相应的值?

4个回答

10

您可以使用 source 命令从脚本中加载这些变量:

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
如果您有一个生成这些变量的脚本/程序,您也可以使用eval
例如:
$ 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

另一个看起来稍微更整洁的选项是{echo a=6; echo b=7; echo c=8 } >test.dat - Norman Gray
或者,一个单独的printf命令:printf %s=%s\n" a 6 b 7 c 8 > test.dat - glenn jackman
@NormanGray,您需要在左大括号后加一个空格,并且最后的echo命令必须以分号结束--http://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping。 - glenn jackman
@glennjackman 说得好。我用 zsh 测试过了——bash 和 sh 显然更加挑剔。 - Norman Gray
@Igor,好的,我打开了test.dat文件并读取了我想要的变量,但是在那之后,我可以关闭这个test.dat文件并返回到脚本文件,并恢复当前脚本文件的剩余会话吗?还是没有必要这样做。 - Prabhat Kumar Singh
显示剩余4条评论

1

要读取第二个脚本中的变量,您只需要将其源化(导入):

## Put this line in your second script
. test.dat

0

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

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

0

总是有修改的机会,编写变量文件的方法不错。您仍然可以按以下方式进行更改:

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

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

source test.dat

或者

(我的建议 :-))

. test.dat


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接