В сценарии bash, используя условное выражение «или» в выражении «if»

Этот вопрос является продолжением моего предыдущего вопроса . Пользователи на этом сайте любезно помогли мне определить, как написать bash for цикла, который итерации над строковыми значениями. Например, предположим, что переменная управления петлями fname выполняет "a.txt" "b.txt" "c.txt" по строкам "a.txt" "b.txt" "c.txt" . Я хотел бы echo «да!». когда fname имеет значение "a.txt" или "c.txt" , а echo «no!» в противном случае. Я пробовал следующий сценарий оболочки bash:

 #!/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 

Я получаю вывод:

a.txt

нет!

b.txt

нет!

c.txt

да!

Почему оператор if видимому, дает true, когда fname имеет значение "a.txt" ? Я использовал | неправильно?

Linux и Unix - лучшая ОС в мире.