在 = 符号后单独存储 os-release 文本文件中的值

在 = 符号后单独存储 os-release 文本文件中的值

我想存储命令中 os-version 的值cat /etc/os-release。 cat /etc/os-release 的输出是

VERSION="4.4"
ID="someId"
ID_LIKE="someIdLike"

我想要一个 shell 命令将版本“4.4”存储到不带撇号或文本“VERSION”的变量中。到目前为止我所做的是

variable==`grep 'VERSION' /etc/os-release

这给了我variable =“VERSION =”4.4“”,我只想要版本的数值,即4.4。

答案1

Ubuntu 上的手册os-release指出该/etc/os-release文件应包含与 shell 兼容的简单变量分配,并且应该能够获取该文件:

的基本文件格式os-release是一个以换行符分隔的类似环境的 shell 兼容变量赋值列表。可以从 shell 脚本获取配置 [...]

$ ( . /etc/os-release && printf '%s\n' "$VERSION" )
20.04.3 LTS (Focal Fossa)

上面,我在子 shell 中获取文件,以避免污染我的交互式环境。在 shell 脚本中,您可能不太关心这一点。获取文件后,我打印变量的值VERSION

VERSION_ID我的系统上的变量中提供了裸版本号(不带补丁版本号) 。尽管如此,您仍然可以VERSION通过使用标准变量扩展删除第一个空格后的所有内容来获取变量中包含的补丁版本。

$ ( . /etc/os-release && printf '%s\n' "${VERSION%% *}" "$VERSION_ID" )
20.04.3
20.04

在您的系统上,由于该VERSION变量似乎包含字符串4.4而没有其他内容,因此您可以获取该文件并使用而"$VERSION"无需进一步处理。

答案2

用于lsb_release获取版本号:

variable=$(lsb_release -rs)

man lsb_release

-r, --release       displays release number of distribution.
-s, --short   displays all of the above information in short output format.

答案3

感谢以上答案,因为它们确实很有帮助,但我找到了另一个解决方案https://unix.stackexchange.com/a/498788这表明我们可以将值存储os-release

VERSION=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"')
echo $VERSION

相关内容