重写bash命令以使ShellCheck兼容

Jus*_*tin 1 bash shell shellcheck

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

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

它目前抱怨:

  • 没用的猫.考虑'cmd <file | ..'或'cmd文件| .."
  • 这是{字面意思.

Ben*_* W. 6

shellcheck投诉是

  • 使用而不是cat filename | grep 'pattern'grep 'pattern' filename
  • awk命令中的第一个括号位于单引号的外部,因此是字面的; 它应该是awk '{command}'

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

memory=$(grep 'MemTotal:' /proc/meminfo | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

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

但是,输出到awk的grep输出很少是最好的解决方案; awk可以做任何grep可以做的事情,所以你可以进一步简化

memory=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)
Run Code Online (Sandbox Code Playgroud)

没有管道!