var="$(command1 -l '$var2' -c 'command2|grep -c "search"')"
if [[ var !=0 ]]; then
fi
Why am I getting "conditional binary operator expected". I searched already and. I. see that [[]] is a test statement but why would it not work?
var="$(command1 -l '$var2' -c 'command2|grep -c "search"')"
if [[ var !=0 ]]; then
fi
Why am I getting "conditional binary operator expected". I searched already and. I. see that [[]] is a test statement but why would it not work?
$ in front of var when you call it, like you wrote it, it will be literally var.[[ ... ]] or (( ... )) together with variables you cannot control. In your case, it might be better to use [ "$var" -ne 0 ].!= and 0 (this is the source of the error!)!= is a string comparison operator, while it might work in your example, you want to use -ne to compare integers.Make use of shellcheck.
(( var !=0 ))would also work here, but like[[ "$var" -ne 0 ]]would be an arbitrary command injection vulnerability if the nature of the output of the command being captured is not under your control. – Stéphane Chazelas Apr 03 '20 at 11:13[[ "$var" -ne 0 ]]unsafe? What about the same without quotes? So, what you think should be preferred? – pLumo Apr 03 '20 at 11:16[[ $var -ne 0 ]](with or without the quotes, the quotes being not necessary in this particular case) or(( var!=0 )), the contents of$varis evaluated as an arithmetic expressions and bad things can happen then.[ "$var" -ne 0 ](the quotes being necessary here as[is an ordinary command) is safe inbash(but not all other shells), as$varis interpreted as a decimal integer only.[ "$var" != 0 ](or the[[ $var != 0 ]]kshism) is safe as well but would return true if$varcontains00as it's a string comparison. – Stéphane Chazelas Apr 03 '20 at 13:32