Mám jeden řádek čísel oddělených mezerou.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Potřebuji, aby tištěná hodnota byla absolutní číslo
Mám ještě jeden problém, který dostávám. Formát, který se snažím získat absolutní číslo. Nic, co dělám, nefunguje. Četl jsem, že
abs(){ number }
by mi to mělo dát, ale nezdá se, že by to fungovalo. Také pokud to funguje, kde to zapracujete do smyčky?
Komentáře
odpověď
Vynásobením libovolného čísla jeho znakem vygenerujete kladné číslo. Nebo pokud chcete absolutní hodnotu čísla. Funkce pro znaménko je velmi jednoduchá:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
Absolutní hodnota je pak:
echo "$(( x * $(sign "$x") ))"
Samozřejmě je mnohem snazší odstranit úvodní záporné znaménko (pokud existuje) nebo pro úplnost libovolné +
nebo -
podepsat (pokud existuje) s úvodními mezerami:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
odpovědět
Pokud máte záporné celé číslo, můžete s ním zacházet jako s řetězcem a odstranit úvodní pomlčku.
x=-5 echo ${x#-}. # "5"
zmodload zsh/mathfunc
) majíabs()
aritmetickou funkci. Tamecho "$(( abs(-12) ))"
vypíše12
.