Dans un script bash, en utilisant le conditionnel "ou" dans une instruction "if"

Cette question est une suite de sortes à ma question précédente . Les users sur ce site m'a gentiment aidé à déterminer comment écrire un bash for boucle qui itère sur les valeurs de string. Par exemple, supposons qu'une variable de contrôle de boucle fname itère sur les strings "a.txt" "b.txt" "c.txt" . Je voudrais me faire l' echo "oui!" quand fname a la valeur "a.txt" ou "c.txt" , et echo "non!" autrement. J'ai essayé le script shell bash suivant:

 #!/bin/bash for fname in "a.txt" "b.txt" "c.txt" do echo $fname if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then echo "yes!" else echo "no!" fi done 

J'obtiens la sortie:

a.txt

non!

b.txt

non!

c.txt

Oui!

Pourquoi l'instruction if donne-t-elle apparemment true quand fname a la valeur "a.txt" ? Ai-je utilisé | incorrectement?

Si vous voulez dire OR utiliser un double tuyau ( || ).

 if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ] 

(Le code OP original utilisant | était simplement en train de canaliser la sortie du côté gauche du côté droit, de la même manière que n'importe quel canal ordinaire fonctionne.)