重写 bash 命令以兼容 ShellCheck
Rewrite bash command to be ShellCheck compliant
如何重写以下 bash 命令以 ShellCheck 兼容?
memory=$(cat /proc/meminfo | grep 'MemTotal:' | awk {'print }' 2> /dev/null)
目前正在投诉:
- 没用的猫。考虑 'cmd < file | ..' 或 'cmd file | ..'
- 这个{是字面意思。
作为猜测,您可能想要:
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)
没有管道!
如何重写以下 bash 命令以 ShellCheck 兼容?
memory=$(cat /proc/meminfo | grep 'MemTotal:' | awk {'print }' 2> /dev/null)
目前正在投诉:
- 没用的猫。考虑 'cmd < file | ..' 或 'cmd file | ..'
- 这个{是字面意思。
作为猜测,您可能想要:
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)
没有管道!