重写 bash 命令以兼容 ShellCheck

Rewrite bash command to be ShellCheck compliant

如何重写以下 bash 命令以 ShellCheck 兼容?

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

目前正在投诉:

作为猜测,您可能想要:

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

但是,这是对 shellcheck 输出的直接解释,所以我不确定你在问什么。就目前而言,您实际上是在问:"Why isn't this working?".

shellcheck 投诉是

  • 使用 cat <em>文件名</em> | grep '<em>pattern</em>' 而不是 grep '<em>pattern</em>' <em>filename</em>
  • awk 命令中的第一个大括号在单引号的外面,因此是字面意思;应该是 awk '{<em>command</em>}'

所以,满足 shellcheck 要求的版本应该是这样的

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

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

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

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

没有管道!