有没有一种优雅的方法来将shell变量设置为文件的内容?


11

说我的文件中有一些配置数据config。为了方便起见,我想将此数据加载到shell变量中CONFIG_DATA

显然我可以做到:

CONFIG_DATA="$(cat config)"

但这对我来说感觉像是无用的cat。这是唯一的方法吗?还是有一种更优雅的方法呢?

答案应该首选POSIX,但可以使用任何shell。


2
像这样读取内存中的整个文件几乎总是一个坏主意,无论您如何编写它。
聪桂

2
@SatoKatsura在某些情况下非常正确。但是,出于这个问题的目的,您可能会认为该文件非常小,因此不是主要问题。
奋斗

1
@SatoKatsura:为什么?
RemcoGerlich

Answers:


23

至少在Bash和Z shell中,有一种更快的方法:

CONFIG_DATA=$(<config)

引用《 Bourne Again》 shell的手册页:

命令替换$(cat文件)可以替换为等效但更快的$(<文件)。


1
我认为这不是一个好选择。无论OP对无用的猫的感觉如何,OP的示例都很简单,大多数Bash用户都会理解。它也很便携。现在$(<file)已经不那么普遍了,因此可能会导致更多的WTF。如果将这样的配置加载到变量中,那么从该操作获得的速度增益就可以忽略不计
MatthewRock 2016年

6
@MatthewRock注意,很多非常不好的做法是常见且熟悉的。猫的无用用途是一个例子,for i in $(cat file); do ...是另一个。普遍使用它们并没有理由继续使用不良工具。但这并不是说猫的这种特殊用法是不好的选择,我不确定是否有更便携的方法。只是说普通和熟悉!=好。
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.