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.arg1janum1viittaavat tässä samannimiseen shell-muuttujaan. Jokainen muuttuja tulkitaan aritmeettisena laajennuksena ja tulos korvataan. Täällä, jos$arg1on010ja$num1on4+5, tulos on false (komento((...))palautuu nollasta poikkeavalla tilalla), koska010on oktaali luvulle 8 ja4+5on 9. -
(($arg1 >= $num1)): sama kuin yllä, paitsi että$arg1ja$num1laajennetaan ennen kuin koko aritmeettinen lauseke arvioidaan. Jos$arg1oli(2ja$num1oli2), edellinen komento olisi epäonnistunut, koska(2ja2)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$arg1ja$num1otetaan 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().