मैं एक बैश स्क्रिप्ट लिख रहा था और अचानक यह व्यवहार शुरू हुआ:
[[ 1 < 2 ]]; echo $? # outputs 0
[[ 2 < 13 ]]; echo $? # outputs 1
लेकिन -lt
काम करता है:
[[ 1 -lt 2 ]]; echo $? # outputs 0
[[ 2 -lt 13 ]]; echo $? # outputs 0
क्या मैंने गलती से <
किसी तरह अधिलेखित कर दिया था ?
यहाँ एक स्क्रिप्ट है जिसे मैंने इस व्यवहार का परीक्षण करने के लिए लिखा है:
#!/bin/bash
for a in {1..5}
do
for b in {1..20}
do
[[ $a < $b ]] && echo $a $b
done
echo
done
यहाँ उत्पादन है:
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
बदल रहा है <
करने के लिए -lt
स्क्रिप्ट में सामान्य उत्पादन (देता है 5 10
, उदाहरण के लिए ऊपर से पता चलता है)।
रिबूट करने से कुछ भी नहीं बदला।
मेरा बैश संस्करण GNU बैश है, संस्करण 4.3.42 (1) -release (x86_64-pc-linux-gnu)। मैं उबंटू 15.10 पर हूं। मुझे नहीं पता कि अन्य जानकारी यहाँ क्या प्रासंगिक है।
<
ऑपरेशन के साथ , आप एक स्ट्रिंग तुलना कर रहे हैं, जबकि-lt
ऑपरेटर संख्यात्मक तुलना है, यदि आप सूचीबद्ध किए गए परिणामों को देखते हैं, तो आपको इसका एहसास होगा। संख्यात्मक रूप से 2 10 से कम है, वर्णानुक्रम में, दूसरे तरीके से।