Grep 等号的右侧

Grep 等号的右侧

我正在 grep 到 /etc/os-release 中,然后我想将输出存储在变量中。我制作了一个条件脚本,其中不需要变量,但现在我需要一个。

[[ ${$(grep ID_LIKE /etc/os-release)#*=} == 'arch' ]] && echo this || echo something

的输出

grep ID_LIKE /etc/os-release 

看起来像这样

ID_LIKE=arch 

我想得到等号之后的东西,最有效的方法是什么?

先感谢您。

答案1

根据os-releaseUbuntu ( ) 上的手册,或文件man os-release的格式应由 shell 脚本安全地获取。获取源文件后,该文件会创建许多 shell 变量,您想知道其中之一的值。/etc/os-release/usr/lib/os-release

在 shell 脚本中,您可以执行以下操作:

unset ID_LIKE

[ -f /usr/lib/os-release ] && . /usr/lib/os-release
[ -f /etc/os-release     ] && . /etc/os-release

if [ -n "$ID_LIKE" ]; then
    printf 'The ID_LIKE variable has the value "%s"\n' "$ID_LIKE"
else
    echo 'The ID_LIKE variable is empty, or not set' >&2
fi

os-release这会尝试在/usr/lib和 中获取文件/etc。中的一项/etc应该覆盖其中所说/usr/lib的任何内容,因此我们最后获取它。

然后它打印 shell 变量的值ID_LIKE

我首先添加了ID_LIKE变量的清除unset,以及手动检查变量值以检测任一文件实际上未设置该变量的实例。

如果没有这些额外的花哨的东西,代码将如下所示:

[ -f /usr/lib/os-release ] && . /usr/lib/os-release
[ -f /etc/os-release     ] && . /etc/os-release

printf 'The ID_LIKE variable has the value "%s"\n' "$ID_LIKE"

答案2

var=$(grep ID_LIKE /etc/os-release)
var=${var#*=}
echo "$var"

德比安

相关内容