像bash中的键值对一样提取

时间:2012-09-07 08:43:19

标签: bash

前几天我偶然发现了一个关于SO的问题。如果我想在/ etc / sysconfig / network中提取包含

HOSTNAME的值
NETWORKING=yes
HOSTNAME=foo

现在我可以做grep并剪切以获得foo但是有类似问题涉及一些bash魔法。我不知道该搜索什么,我现在似乎无法找到问题。它涉及#{HOSTNAME}之类的内容。好像它将HOSTNAME视为关键字并将foo视为值。

1 个答案:

答案 0 :(得分:2)

如果该配置文件与shell语法兼容,只需将其包含为shell脚本即可。 IIRC,类似Red Hat的发行版/etc/sysconfig中的文件确实设计为可由shell解析。请注意,这意味着

  • 如果shell特殊字符可能以变量的值结尾,则必须正确引用它们。例如,var="value with spaces"需要引号。 var="with\$dollar"需要反斜杠。
  • 该脚本可以运行将要执行的任意代码,因此只有在您信任其内容时才可以。

如果这些假设有效,那么你可以走简单路线:

. /etc/sysconfig/network
echo "$HOSTNAME"

关于引用和括号,请参阅$VAR vs ${VAR} and to quote or not to quote