Numeron absoluuttinen arvo

Minulla on yksi numerorivi välilyönnillä.

read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done 

Tarvitsen painetun arvon olevan absoluuttinen luku

Sain vielä yhden numeron. Muoto, jota yritän saada absoluuttisen luvun. Mikään mitä teen, ei toimi. Luin, että

abs(){ number } 

pitäisi antaa minulle tämä, mutta se ei näytä toimivan. Myös jos se toimii, missä teet sen silmukkaan?

kommentit

  • Katso myös unix.stackexchange.com/q/220588/117549
  • Huomaa, että ksh93: lla ja zsh: llä (zmodload zsh/mathfunc jälkeen) on abs() aritmeettinen toiminto. Siellä echo "$(( abs(-12) ))" tuottaa 12.

vastaus

Minkä tahansa luvun kertominen sen -merkillä tuottaa positiivisen luvun. Merkin funktio on hyvin yksinkertainen:

sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; } 

Absoluuttinen arvo on tällöin:

echo "$(( x * $(sign "$x") ))" 

On tietysti paljon helpompaa poistaa vain johtava negatiivinen merkki (jos sellainen on) tai täydellisyyden vuoksi kaikki + tai - -merkki (jos sellainen on) kaikilla etutiloilla:

echo "${x##*[+-]}" # assuming x is an integer valid in the shell. 

Vastaa

Jos sinulla on negatiivinen kokonaisluku, voit käsitellä sitä merkkijonona ja poistaa etuviivan

x=-5 echo ${x#-}. # "5" 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *