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!
- Utilisation prévue de ctrl + T dans bash?
- Actualiser les variables env après l'édition du file bashrc
- combiner la sortie de deux commands dans bash
- pourquoi ls -d list aussi les files, et où est-il documenté?
- Comment save une command que vous avez input sans l'exécuter?
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.)