首页 > 解决方案 > Shell 脚本:[参数过多

问题描述

有人可以解释为什么我的if陈述不起作用吗?

if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0  ] ]

标签: bashshellunix

解决方案


代替:

[ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0  ] ]

和:

[ $# -ge 2 ] && grep -q "$2" "$1"

在这个命令中:

  • [ $# -ge 2 ]测试是否提供了 2 个或更多参数

  • &&是逻辑和

  • grep -q "$2" "$1"如果 pattern$2出现在 file 中,则返回 true $1。该选项-q告诉grep要安静,只需设置if命令将要查找的退出代码。

例子:

考虑一个包含此文件的目录:

$ cat input.txt
a pattern here

让我们像在 shell 脚本中一样设置参数:

$ set -- input.txt pattern

现在,让我们运行我们的命令:

$ if [ $# -ge 2 ] && grep -oq "$2" $1; then echo yes; fi
yes

推荐阅读