Instruction Bash if else ne reconnaissant pas les caractères +/-

Je tente de lire un fichier, ligne par ligne, et à chaque itération, vérifie le cinquième élément du tableau, qui sera un caractère + ou – (plus ou moins). Je suis capable de lire le fichier ligne par ligne, mais je ne peux pas obtenir la déclaration if / else à reconnaître le +/-.

Code Bash j’ai écrit

#!/bin/bash # save the field separator old_IFS=$IFS while IFS=$'\t' read -r -a myArray do echo "${myArray[5]}" if [ $myArray[5] = "+" ]; then echo plus elif [ $myArray[5] = "-" ]; then echo minus else echo no fi done < /Users/Alex/Desktop/test.bed # restore default field separator IFS=$old_IFS 

Entrée de l’échantillon

 Scaffold1 34 39 name . - Scaffold1 12 17 name . - Scaffold1 17 12 name . + Scaffold1 43 49 name . + Scaffold1 45 48 name . - 

Sortie de l’échantillon

 - no - no + no + no - no 

Sous chaque +/-, il devrait dire plus ou moins mais au lieu de cela, il indique non, indiquant que les instructions conditionnelles ont échoué. Une fois cette sortie correctement, je vais changer les commandes d’écho pour faire de l’arithmétique sur la colonne 2 ou 3 en fonction du signe.

Vous avez besoin:

 ${myArray[5]} 

Ne pas:

 $myArray[5] # this is equivalent to "${myArray[0]}[5]" 

Au fait, considérez une déclaration de case à la place:

 case ${myArray[5]} in -) echo minus ;; +) echo plus ;; *) echo no ;; esac 

Vous pouvez également éviter le besoin d’un tableau – et rendre ainsi votre code compatible POSIX sh – en utilisant des arguments nommés à read pour chaque colonne:

 while IFS=$'\t' read -r scaffold num1 num2 name dot col _; do : "$col" refers to your fifth column here done