Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中获得像“310”这样的linux内核版本?_Linux_Bash - Fatal编程技术网

在bash中获得像“310”这样的linux内核版本?

在bash中获得像“310”这样的linux内核版本?,linux,bash,Linux,Bash,我创建了一个脚本,以特定的方式需要当前的内核版本 例如,如果我使用:3.10.34-1-MANJARO,我只想得到310 哪种方法最好/最简单?您可以使用awk: 您可以使用awk: 要使用bash的正则表达式匹配运算符=~,用仅限bash的解决方案补充@devnull的有用答案: 使用bash参数扩展的替代解决方案: 注意:只有当uname-r的输出在基于第三个组件中包含一个-时,这才起作用-这似乎适用于Linux发行版,但不适用于OSX ver=$(uname -r) #

我创建了一个脚本,以特定的方式需要当前的内核版本

例如,如果我使用:3.10.34-1-MANJARO,我只想得到310

哪种方法最好/最简单?

您可以使用awk:

您可以使用awk:


要使用bash的正则表达式匹配运算符=~,用仅限bash的解决方案补充@devnull的有用答案:

使用bash参数扩展的替代解决方案:

注意:只有当uname-r的输出在基于第三个组件中包含一个-时,这才起作用-这似乎适用于Linux发行版,但不适用于OSX

ver=$(uname -r)          # get kernel release version, e.g., "3.10.34-1-MANJARO"
ver="${ver%.*-*}"        # remove suffix starting with '.' and containing '-'
ver="${ver//.}"          # remove periods (a single `/` would do here)

echo "$ver" # e.g., -> '310'

向@alvits致敬,他指出uname-r可能还有一个额外的问题。描述体系结构的组件-例如3.8.13-16.2.1.el6uek.x86_64。

使用bash的正则表达式匹配运算符,用一个仅适用于bash的解决方案来补充@devnull的有用答案=~:

使用bash参数扩展的替代解决方案:

注意:只有当uname-r的输出在基于第三个组件中包含一个-时,这才起作用-这似乎适用于Linux发行版,但不适用于OSX

ver=$(uname -r)          # get kernel release version, e.g., "3.10.34-1-MANJARO"
ver="${ver%.*-*}"        # remove suffix starting with '.' and containing '-'
ver="${ver//.}"          # remove periods (a single `/` would do here)

echo "$ver" # e.g., -> '310'

向@alvits致敬,他指出uname-r可能还有一个额外的问题。描述体系结构的组件-例如3.8.13-16.2.1.el6uek.x86_64.

仅限Bash的解决方案:

declare -a TEMP2
TEMP1=$(uname --kernel-release)
TEMP2=(${TEMP1//[.-]/ })
VERSION=$(((${TEMP2[0]} * 100)\
    + ${TEMP2[1]}))
echo $VERSION

当OP的版本升级到类似4.1的“仅限Bash”解决方案时,这仍然有效:

declare -a TEMP2
TEMP1=$(uname --kernel-release)
TEMP2=(${TEMP1//[.-]/ })
VERSION=$(((${TEMP2[0]} * 100)\
    + ${TEMP2[1]}))
echo $VERSION

当OP的版本升级到类似4.1的版本时,这仍然有效。谢谢!我使用这个命令awk-F.{print$1$2}cut在输出多个字段时实际上插入了分隔符,因此得到的是3.10,而不是310-您可以通过管道传输到tr-d..@mklement0我可能产生了幻觉-这就是我进行编辑的原因。如果使用cut而不使用longish选项是可行的,我从一开始就不会建议使用awk。谢谢您指出。很酷,不知道-output分隔符是GNU cut扩展。@user3064931,在这种情况下不需要使用here字符串,只需执行:awk-F.{print$1$2}谢谢!我使用这个命令awk-F.{print$1$2}cut在输出多个字段时实际上插入了分隔符,因此得到的是3.10,而不是310-您可以通过管道传输到tr-d..@mklement0我可能产生了幻觉-这就是我进行编辑的原因。如果使用cut而不使用longish选项是可行的,我从一开始就不会建议使用awk。谢谢您指出。很酷,不知道-output分隔符是GNU剪切扩展。@user3064931,在这种情况下不需要使用here字符串,只需执行:awk-F.{print$1$2}'+1我会更具体一点。内核版本可能还包括体系结构,如3.8.13-16.2.1.el6uek.x86_64。删除。*-*可能比删除。*更合适,因为最后一个版本是。可能不是你想要的点。但是我给你+1,因为这个问题对于内核版本来说非常特殊format@alvits:谢谢你的指点;我已经相应地更新了我的答案,还包括了一个更通用的基于=~-的解决方案。内核版本可能还包括体系结构,如3.8.13-16.2.1.el6uek.x86_64。删除。*-*可能比删除。*更合适,因为最后一个版本是。可能不是你想要的点。但是我给你+1,因为这个问题对于内核版本来说非常特殊format@alvits:谢谢你的指点;我已经相应地更新了我的答案,还包括了一个更通用的基于=~-的解决方案。
declare -a TEMP2
TEMP1=$(uname --kernel-release)
TEMP2=(${TEMP1//[.-]/ })
VERSION=$(((${TEMP2[0]} * 100)\
    + ${TEMP2[1]}))
echo $VERSION