Saya sedang menulis skrip bash dan tiba-tiba perilaku ini dimulai:
[[ 1 < 2 ]]; echo $? # outputs 0
[[ 2 < 13 ]]; echo $? # outputs 1
tapi -lt
bekerja dengan baik:
[[ 1 -lt 2 ]]; echo $? # outputs 0
[[ 2 -lt 13 ]]; echo $? # outputs 0
Apakah saya <
entah bagaimana secara tidak sengaja menimpa ?
berikut ini skrip yang saya tulis untuk menguji perilaku ini:
#!/bin/bash
for a in {1..5}
do
for b in {1..20}
do
[[ $a < $b ]] && echo $a $b
done
echo
done
di sini adalah output:
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
mengubah <
ke -lt
dalam skrip memberikan output normal ( 5 10
muncul misalnya).
Mem-boot ulang tidak mengubah apa pun.
Versi bash saya adalah GNU bash, versi 4.3.42 (1) -release (x86_64-pc-linux-gnu). Saya di Ubuntu 15.10. Saya tidak tahu informasi apa yang relevan di sini.
<
operasi, Anda membuat perbandingan string, sedangkan-lt
operator perbandingan numerik, Jika Anda melihat hasil yang telah Anda daftarkan, Anda akan menyadarinya. Secara numerik 2 kurang dari 10, menurut abjad, sebaliknya.Jawaban:
Dari
bash
halaman manual.Dari output, tampaknya berfungsi seperti yang dirancang.
sumber
Bagaimana tentang:
Menurut http://www.tldp.org/LDP/abs/html/dblparens.html
sumber
Pertama,
[[
bukan POSIX dan harus dihindari.Kedua, jika Anda ingin menggunakan
<
sebagai bagian dari tes aritmatika Anda dapat melakukan ini, tetapi dengan sintaks yang berbeda:Atau:
sumber