使用 grep lookup/cut 函数而不是源来加载 bash 中的配置文件

using grep lookup/cut function instead of source to load config file in bash

我现在正在使用一个脚本,它通过 source 命令加载我所有的配置变量。它简单快捷有效。但我知道这不是一个非常安全的选择。

我了解到我可以使用 $include 指令来获得相同的结果。这与 source 有什么不同或更安全,还是它们本质上相同?

如果以上两个选项都不安全,作为最后的选择,我试图理解我在 shell 脚本书中找到的 lookup 函数。它基本上使用 grep、分隔符和 cut 从文件中执行变量名查找并检索值。这看起来很安全,我可以用它来修改我的脚本。

它几乎可以正常工作。我想我只需要将分隔符从 $TAB 更改为“=”,但我不确定它是如何工作的,甚至不确定它是否会工作。

我的配置文件格式:

Param=value

示例函数(来自注释)

lookup() {
   grep "^$TAB" "" | cut -f2
}

用法:

lookup [options] KEY FILE
-f sets field delimiter
-k sets the number of field which has key
-v specifies which field to return

我正在使用 Raspbian Jessie Lite 的 Debian 版本以防语法问题。

您应该考虑使用 awk 而不是 grepcut,它可以根据给定的分隔符轻松地执行搜索和剪切操作:

lookup() {
   key=""
   filename=""

   awk -F= -v key="$key" ' == key{print }' "$filename"

   # use this awk if = can be present in value part as well
   # awk -v key="^$key=" '[=10=] ~ key && sub(key, "")' "$filename"
}

这可以称为:

lookup search configfile.txt

-F= 将 awk 命令的分隔符设置为 =

另请注意,单引号内的 </code> 和 <code> 是第 1 列和第 2 列,不应与位置 shell 变量 </code> 混淆, <code>

您应该查看 getopts 以使其接受 -f-k 等类型参数。