Bezwzględna wartość liczby

Mam pojedynczy wiersz liczb oddzielony spacją.

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

Potrzebuję, aby wydrukowana wartość była liczbą bezwzględną

Mam jeszcze jeden problem, który otrzymuję. Format, który próbuję uzyskać liczbę bezwzględną. Nic, co robię, nie działa. Czytałem, że

abs(){ number } 

powinno mi to dać, ale wydaje się, że nie działa. Jeśli to zadziała, gdzie wprowadzisz to w pętli?

Komentarze

Odpowiedź

Pomnożenie dowolnej liczby przez jej znak wygeneruje liczbę dodatnią. Lub, jeśli wartość bezwzględna liczby. Funkcja znaku jest bardzo prosta:

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

Wartość bezwzględna to:

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

Oczywiście o wiele łatwiej jest po prostu usunąć wiodący znak minus (jeśli istnieje) lub, dla kompletności, dowolny + lub Znak - (jeśli istnieje) ze spacjami na początku:

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

Odpowiedź

Jeśli masz ujemną liczbę całkowitą, możesz traktować ją jako ciąg i usunąć początkowy myślnik

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *