var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi 
Waarom krijg ik “voorwaardelijke binaire operator verwacht”. Ik heb al gezocht en. Ik zie dat [[]] een testverklaring is, maar waarom zou het niet werken?
Answer
-  Jij “re missing 
$voor var wanneer je het aanroept, zoals je het hebt geschreven, zal het letterlijkvarzijn. -  Overweeg  mogelijke kwetsbaarheden  van uw script wanneer u 
[[ ... ]]of(( ... ))samen met variabelen die u niet kunt controleren. In uw geval is het misschien beter om[ "$var" -ne 0 ]te gebruiken. -  U mist een spatie tussen 
!=en0(dit is de oorzaak van de fout!) -  
!=is een stringvergelijkingsoperator , hoewel het in uw voorbeeld zou kunnen werken, wilt u-negebruiken om gehele getallen te vergelijken. 
Maak gebruik van shellcheck .
(( var !=0 ))zou hier ook werken, maar zoals[[ "$var" -ne 0 ]]zou een willekeurige kwetsbaarheid voor commando-injectie zijn als de aard van de uitvoer van het commando dat wordt vastgelegd staat niet onder jouw controle.[[ "$var" -ne 0 ]]onveilig? Hoe zit het met hetzelfde zonder aanhalingstekens? Dus wat zou volgens jou de voorkeur moeten hebben?[[ $var -ne 0 ]](met of zonder de aanhalingstekens, de aanhalingstekens zijn in dit specifieke geval niet nodig) of(( var!=0 )), de inhoud van$varwordt geëvalueerd als een rekenkundige uitdrukking en kunnen er slechte dingen gebeuren .[ "$var" -ne 0 ](de aanhalingstekens zijn hier nodig omdat[een gewoon commando is) is veilig inbash(maar niet alle andere shells), aangezien$varalleen wordt geïnterpreteerd als een decimaal geheel getal.[ "$var" != 0 ](of het[[ $var != 0 ]]kshism) is ook veilig, maar zou true retourneren als$varbevat00aangezien het ' een stringvergelijking is.