有人可以解释为什么我的if
声明无效吗?
if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0 ] ]
更换:
[ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0 ] ]
附:
[ $# -ge 2 ] && grep -q "$2" "$1"
在此命令中:
[ $# -ge 2 ]
测试是否提供了2个或更多参数&&
是合乎逻辑的grep -q "$2" "$1"
出现在文件$2
中,$1
返回true。选项-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
正如其他人已经指出你的括号错了,但我会把这些代码写成单独的测试,所以你可以提供有意义的错误信息,例如:
(( $# >= 2 )) || { printf '$# is too small\n' >&2; exit 1; }
grep -q "$2" "$1" || { printf 'grep found nothing\n' >&2; exit 1; }
或者你想表达的任何东西。无论你做什么 - 保持简单......