Am o singură linie de numere separate printr-un spațiu.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Am nevoie ca valoarea tipărită să fie un număr absolut
Am mai primit un număr. Formatul pe care încerc să obțin un număr absolut. Nimic din ceea ce fac nu funcționează. Am citit că
abs(){ number }
ar trebui să-mi dea acest lucru, dar nu pare să funcționeze. De asemenea, dacă asta funcționează, unde lucrezi asta în buclă?
Comentarii
Răspuns
Înmulțirea oricărui număr cu semnul său va genera un număr pozitiv. Sau, dacă doriți, valoarea absolută a numărului. Funcția pentru semn este foarte simplă:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
Valoarea absolută este apoi:
echo "$(( x * $(sign "$x") ))"
Desigur, este mult mai ușor să eliminați semnul negativ principal (dacă există) sau, pentru completare, orice +
sau -
semn (dacă există) cu orice spații principale:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
Răspuns
Dacă aveți un număr întreg negativ, îl puteți trata ca un șir și puteți elimina liniuța principală
x=-5 echo ${x#-}. # "5"
zmodload zsh/mathfunc
) au o funcție aritmeticăabs()
. Acolo,echo "$(( abs(-12) ))"
va afișa12
.