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"
zmodload zsh/mathfunc
) mają funkcję arytmetycznąabs()
. Tamecho "$(( abs(-12) ))"
wyświetli12
.