有人可以解释为什么我的if
语句不起作用吗?
if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0 ] ]
答案 0 :(得分: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
答案 1 :(得分:0)
正如其他人指出的那样,您使用了错误的括号,但是无论如何我还是将代码编写为单独的测试,以便您可以提供有意义的错误消息,例如:
(( $# >= 2 )) || { printf '$# is too small\n' >&2; exit 1; }
grep -q "$2" "$1" || { printf 'grep found nothing\n' >&2; exit 1; }
或您要表达的内容。无论您在做什么-保持简单...