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
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"
zmodload zsh/mathfunc
jälkeen) onabs()
aritmeettinen toiminto. Sielläecho "$(( abs(-12) ))"
tuottaa12
.