J'écrivais un script bash et soudain ce comportement a commencé:
[[ 1 < 2 ]]; echo $? # outputs 0
[[ 2 < 13 ]]; echo $? # outputs 1
mais -lt
fonctionne bien:
[[ 1 -lt 2 ]]; echo $? # outputs 0
[[ 2 -lt 13 ]]; echo $? # outputs 0
ai-je accidentellement écrasé d'une <
manière ou d'une autre?
voici un script que j'ai écrit pour tester ce comportement:
#!/bin/bash
for a in {1..5}
do
for b in {1..20}
do
[[ $a < $b ]] && echo $a $b
done
echo
done
voici la sortie:
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 20
3 4
3 5
3 6
3 7
3 8
3 9
4 5
4 6
4 7
4 8
4 9
5 6
5 7
5 8
5 9
changer <
pour -lt
dans le script donne une sortie normale ( 5 10
apparaît par exemple).
Le redémarrage n'a rien changé.
Ma version bash est GNU bash, version 4.3.42 (1) -release (x86_64-pc-linux-gnu). Je suis sur Ubuntu 15.10. Je ne sais pas quelles autres informations sont pertinentes ici.
<
opération, vous faites une comparaison de chaînes, tandis que l'-lt
opérateur est une comparaison numérique, si vous regardez les résultats que vous avez répertoriés, vous vous en rendrez compte. Numériquement 2 est inférieur à 10, par ordre alphabétique, dans l'autre sens.Réponses:
Depuis la
bash
page de manuel.De la sortie, il semble fonctionner comme prévu.
la source
Que diriez-vous:
Selon http://www.tldp.org/LDP/abs/html/dblparens.html
la source
Tout d'abord,
[[
n'est pas POSIX et doit être évité.Deuxièmement, si vous souhaitez utiliser
<
dans le cadre d'un test arithmétique, vous pouvez le faire, mais avec une syntaxe différente:Ou:
la source