1

如何重写以下 bash 命令以符合ShellCheck

memory=$(cat /proc/meminfo | grep 'MemTotal:' | awk {'print $2}' 2> /dev/null)

它目前抱怨:

  • 没用的猫。考虑'cmd <文件| ..' 或 'cmd 文件 | ..'
  • 这个 { 是字面的。
4

2 回答 2

6

shellcheck 投诉是

  • 使用代替cat filename | grep 'pattern'grep 'pattern' filename
  • awk 命令中的第一个大括号在单引号的外面,因此是字面的;它应该是awk '{command}'

因此,满足 shellcheck 的版本看起来像

memory=$(grep 'MemTotal:' /proc/meminfo | awk '{print $2}')

我不确定你为什么重定向标准错误,所以我放弃了它。

但是,将 grep 输出管道传输到 awk 很少是最好的解决方案。awk 几乎可以做任何 grep 可以做的事情,因此您可以进一步简化为

memory=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)

没有管道!

于 2017-08-16T01:35:56.347 回答
2

就像猜测一样,您可能想要:

memory=$(grep 'MemTotal:' /proc/meminfo | awk '{print $2}' 2> /dev/null)

但是,这是对 shellcheck 输出的直接解释,所以我不确定你在问什么。就目前而言,您本质上是在问:“为什么这不起作用?”。

于 2017-08-16T01:21:50.127 回答