需要 bash shell 脚本从文件中读取名称值对
我有一个文件,就像
name1=value1
name2=value2
我需要使用 shell 脚本读取该文件并设置变量
$name1=value1
$name2=value2
请提供一个可以执行此操作的脚本。
我尝试了下面的第一个答案,即获取属性文件,但如果该值包含空格,我就会遇到问题。它被解释为空格后的新命令。我怎样才能让它在有空间的情况下工作?
I have a file like
name1=value1
name2=value2
I need to read this file using shell script and set variables
$name1=value1
$name2=value2
Please provide a script that can do this.
I tried the first answer below, i.e. sourcing the properties file but I'm getting a problem if the value contains spaces. It gets interpreted as a new command after the space. How can I get it to work in the presence of spaces?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
如果输入文件中的所有行都是这种格式,那么只需获取它就会设置变量:
或
If all lines in the input file are of this format, then simply sourcing it will set the variables:
or
使用:
Use:
使用
.
或source
获取文件存在一个问题,即您还可以将要执行的命令放入其中。如果输入不是绝对可信的,那就是一个问题(hellorm -rf /
)。如果已知的键数量有限,您可以使用
read
来读取键值对,如下所示:Sourcing the file using
.
orsource
has the problem that you can also put commands in there that are executed. If the input is not absolutely trusted, that's a problem (hellorm -rf /
).You can use
read
to read key value pairs like this if there's only a limited known amount of keys:如果您的文件位置是
/location/to/file
并且密钥是mykey
:if your file location is
/location/to/file
and the key ismykey
:@robinst 的改进版本
更改:
@kurumi 的解决方案也是一个不错的解决方案,但 busybox 不支持它
这里是一个完全不同的变体:(
我尝试做最好逃跑,但我不确定这是否足够)
Improved version of @robinst
Changes:
A nice one is also the solution of @kurumi, but it isn't supported in busybox
And here a completely different variant:
(i tried to do best with escaping, but I'm not sure if that's enough)
假设您的文件名是
some.properties
suppose the name of your file is
some.properties
使用 shdotenv
dotenv 支持 shell 和符合 POSIX 的 .env 语法规范
https://github.com/ko1nksm/shdotenv
将 .env 文件加载到 shell 脚本中。
Use shdotenv
dotenv support for shell and POSIX-compliant .env syntax specification
https://github.com/ko1nksm/shdotenv
Load the .env file into your shell script.