Tähän kysymykseen on jo annettu vastauksia :
Kommentit
- stackoverflow.com/ a / 18668580/1032785
Vastaus
Näitä operaattoreita käytetään esim. (( ... ))
ja $(( ... ))
( aritmeettinen arviointi ja aritmeettinen laajennus ):
if (( arg1 >= num1 )) && (( arg2 <= num2 )); then ... fi
Ja myös let
. Seuraava vastaa ylläolevaa:
if let "arg1 >= num1" && let "arg2 <= num2"; then ... fi
Katso Bash-käsikirjan osio ”ARITMEETTINEN ARVIOINTI”.
Vastaa
Kohdassa bash
erityisesti:
-
((arg1 >= num1))
(peritty osoitteestaksh
) tekee aritmeettisen vertailun.arg1
janum1
viittaavat tässä samannimiseen shell-muuttujaan. Jokainen muuttuja tulkitaan aritmeettisena laajennuksena ja tulos korvataan. Täällä, jos$arg1
on010
ja$num1
on4+5
, tulos on false (komento((...))
palautuu nollasta poikkeavalla tilalla), koska010
on oktaali luvulle 8 ja4+5
on 9. -
(($arg1 >= $num1))
: sama kuin yllä, paitsi että$arg1
ja$num1
laajennetaan ennen kuin koko aritmeettinen lauseke arvioidaan. Jos$arg1
oli(2
ja$num1
oli2)
, edellinen komento olisi epäonnistunut, koska(2
ja2)
eivät ole yksinään kelvollisia lausekkeita. Mutta tässä se onnistuu, koska(2 >= 2)
olisi arvioitava aritmeettinen lauseke. Yleensä aritmeettisten lausekkeiden sisällä on parempi jättää$
pois. Vertaa esimerkiksia=2+2; echo "$((3 * $a))"
kohtaana=2+2; echo "$((3 * a))"
. -
let "..."
(myös tiedostosta ksh). Sama kuin((...))
paitsi, että se ”s jäsennetty tavallisena komennona, on vähemmän luettavissa, on yhtä vähän siirrettävissä ja sinun on kiinnitettävä enemmän huomiota lainaamiseen. -
[ "$arg1" -ge "$num1" ]
. Se on vakio ja kannettava. Vain desimaalivakioita tuetaan.[ 010 -ge 9 ]
on sama kuin[ 10 -ge 9 ]
. -
[[ $arg1 -ge $num1 ]]
. Myös ksh-tiedostosta, mutta suurilla eroilla. Tällä kertaa$arg1
ja$num1
otetaan huomioon aritmeettisina lausekkeina eikä vain desimaalivakioina.[[ 010 -ge 9 ]]
palauttaa taas epätodellisen. -
[[ $arg1 < $num1 ]]
. Merkkijonojen vertailu.strcoll()
merkkijonojen vertaamiseksi, joten käytä lajittelualgoritmia kielessä. Huomaa, että kun<
ja>
käytä lajittelualgoritmia,=
/==
vertaa tavu-tavu, joten jousipareja voi olla kaikki<
,>
ja=
/==
return false.<=
ja>=
ei tueta. -
[ "$arg1" "<" "$num1" ]
. Ei-standardi. Sama kuin yllä, mutta käyttämällä komentoa[
.<
on lainattava, joten sitä ei pidetä uudelleenohjausoperaattorina. -
expr " $arg1" "<=" " $num1" > /dev/null
(huomioi upotettu välilyönnit pakottaakseen leksikaalisen vertailun ja välttämään ongelmat merkkijonoilla, jotka näyttävätexpr
-operaattoreilta) taiawk "BEGIN{exit(!(""ARGV[1] <= ""ARGV[2]))}" "$arg1" "$num1"
ovat vakiokomentoja merkkijonojen vertailemiseksistrcoll()
.