linux - Why does if [ !$(grep -q) ] not work when if grep -q does? -
i'm having problem getting grep work in if statement. in next code segment, if-check comes true (i.e. word not found), , programme prints not found, though words in ~/.memory.
for (( i=0; i<${#aspellwords[*]}; i++)); if [ !$(grep -q "${aspellwords[$i]}" ~/.memory) ]; words[$i]="${aspellwords[$i]}" printf "\nnot found\n" fi done however, when test following code in place of previous segment:
for (( i=0; i<${#aspellwords[*]}; i++)); if grep -q "${aspellwords[$i]}" ~/.memory; echo found it; fi done it works fine , finds word without issues.
so what's wrong first segment of code?
a number of things wrong first snippet.
you don't want [ ... ] if want test homecoming code. drop those.
[] not part of if syntax (as can see sec snippet).
[ shell built-in , binary on system. exits homecoming code. if ...; then tests homecoming code of ....
$() command substitution. replaces output command run.
so [ !$(grep ...) ] evaluating [ !output_from_grep ] , [ word ] interpreted [ -n word ] true whenever word non-empty. given ! never non-empty true.
simply, indicated @thom in comment (a bit obliquely), add together ! negation sec snippet space between , grep.
linux bash shell unix grep
No comments:
Post a Comment