我现在正在使用一个脚本,它通过 source
命令加载我所有的配置变量。它简单快捷有效。但我知道这不是一个非常安全的选择。
我读到我可以使用 $include
指令来获得相同的结果。这与 source
有什么不同或更安全,还是它们本质上相同?
如果上述两个选项都不安全,作为最后的选择,我试图理解我在 shell 脚本书籍中找到的 lookup
函数。它主要使用 grep
、分隔符和 cut
从文件中执行变量名查找并检索值。这看起来很安全,我可以用它来修改我的脚本。
它几乎可以正常工作。我想我只需要将分隔符从 $TAB 更改为“=”,但我不确定它是如何工作的,或者它是否会工作。
我的配置文件格式:
Param=value
示例函数(来自笔记)
lookup() {
grep "^$1$TAB" "$2" | 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
我正在使用 Debian 版本的 Raspbian Jessie Lite 以防语法问题。
最佳答案
而不是 grep
和 cut
你应该考虑使用 awk
可以根据给定的分隔符轻松地进行搜索和剪切操作:
lookup() {
key="$1"
filename="$2"
awk -F= -v key="$key" '$1 == key{print $2}' "$filename"
# use this awk if = can be present in value part as well
# awk -v key="^$key=" '$0 ~ key && sub(key, "")' "$filename"
}
这可以称为:
lookup search configfile.txt
-F=
将分隔符设置为 =
用于 awk 命令。
另请注意 $1
和 $2
单引号内是第 1 列和第 2 列,不应与位置 shell 变量 $1
混淆。 , $2
等等
你应该看看getopts
让它接受-f
, -k
等类型参数。
关于linux - 使用 grep 查找/剪切功能而不是源代码在 bash 中加载配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966742/