重写 bash 命令以符合 ShellCheck
Posted
技术标签:
【中文标题】重写 bash 命令以符合 ShellCheck【英文标题】:Rewrite bash command to be ShellCheck compliant 【发布时间】:2018-01-24 00:21:23 【问题描述】:如何重写以下 bash 命令以符合 ShellCheck 标准?
memory=$(cat /proc/meminfo | grep 'MemTotal:' | awk 'print $2' 2> /dev/null)
目前正在抱怨:
没用的猫。考虑'cmd 这个 是字面意思。【问题讨论】:
我认为您的意思是“无用”而不是“除非”(考虑在将来剪切和粘贴错误)。我已经编辑它以适应。您是否考虑过按照该工具的建议进行更改? 【参考方案1】:shellcheck 投诉是
使用cat <em>filename</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 $2')
我不确定你为什么重定向标准错误,所以我放弃了它。
但是,将 grep 输出通过管道传输到 awk 很少是最好的解决方案; awk 几乎可以做任何 grep 可以做的事情,因此您可以进一步简化为
memory=$(awk '/MemTotal:/ print $2 ' /proc/meminfo)
没有管道!
【讨论】:
【参考方案2】:只是猜测,你可能想要:
memory=$(grep 'MemTotal:' /proc/meminfo | awk 'print $2' 2> /dev/null)
但是,这是对 shellcheck 输出的直接解释,所以我不确定您要问什么。就目前而言,您本质上是在问:“为什么这不起作用?”。
【讨论】:
完美。谢谢。以上是关于重写 bash 命令以符合 ShellCheck的主要内容,如果未能解决你的问题,请参考以下文章