Tôi đang viết một kịch bản bash và đột nhiên hành vi này bắt đầu:
[[ 1 < 2 ]]; echo $? # outputs 0
[[ 2 < 13 ]]; echo $? # outputs 1
nhưng -lt
hoạt động tốt:
[[ 1 -lt 2 ]]; echo $? # outputs 0
[[ 2 -lt 13 ]]; echo $? # outputs 0
Có phải tôi đã vô tình ghi đè lên <
bằng cách nào đó?
đây là kịch bản tôi đã viết để kiểm tra hành vi này:
#!/bin/bash
for a in {1..5}
do
for b in {1..20}
do
[[ $a < $b ]] && echo $a $b
done
echo
done
đây là đầu ra:
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
thay đổi <
để -lt
trong kịch bản cho sản lượng bình thường ( 5 10
show lên ví dụ).
Khởi động lại không thay đổi bất cứ điều gì.
Phiên bản bash của tôi là GNU bash, phiên bản 4.3.42 (1) -release (x86_64-pc-linux-gnu). Tôi đang dùng Ubuntu 15.10. Tôi không biết những thông tin khác có liên quan ở đây.
<
thao tác, bạn đang thực hiện so sánh chuỗi, trong khi-lt
toán tử là so sánh số, Nếu bạn nhìn vào kết quả bạn đã liệt kê, bạn sẽ nhận ra điều đó. Số 2 nhỏ hơn 10, theo thứ tự abc, ngược lại.