我正在 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-release
Ubuntu ( ) 上的手册,或文件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"
德比安