EDIT lernen. basierend auf den Kommentare zu dieser Antwort (dank Benutzer unbekannt und glenn jackman), so scheint es, dass, wenn bc
für einen wahr/falsch Test, die erforderlich bash
Test ist einfach:
(($(echo "$X < $Y" |bc)))
... die Testergebnisse und Skript unter
wheras sehen, der Vergleich zu -ne 0
für den alten Stil bash [ ]
Test benötigt.
bash
nicht nativ verarbeiten Gleitkommazahlen, aber Sie können wie bc
Von man bc
ein Dienstprogramm aufrufen - Ein beliebiger Genauigkeit Rechner Sprache
X=3.1
Y=4.1
# This test has two superfluous components.
# See EDIT (above) and TESTS below
if (($(echo "scale=9; $X < $Y" |bc)!=0)) ;then
echo "wassup"
fi
TEST Ergebnisse:
if [ "1" ] true
[ "1" ] true
if [ "0" ] true
[ "0" ] true
if [ 1 ] true
[ 1 ] true
if [ 0 ] true
[ 0 ] true
if (("1")) true
(("1")) true
if (("0")) false
(("0")) false
if (( 1 )) true
(( 1 )) true
if (( 0 )) false
(( 0 )) false
echo "1<1"|bc true
echo "1<0"|bc true
Testskript:
printf 'if [ "1" ] '; if [ "1" ]; then echo true; else echo false; fi
printf ' [ "1" ] '; [ "1" ] && echo true || echo false
printf 'if [ "0" ] '; if [ "0" ]; then echo true; else echo false; fi
printf ' [ "0" ] '; [ "0" ] && echo true || echo false
echo
printf 'if [ 1 ] '; if [ 1 ]; then echo true; else echo false; fi
printf ' [ 1 ] '; [ 1 ] && echo true || echo false
printf 'if [ 0 ] '; if [ 0 ]; then echo true; else echo false; fi
printf ' [ 0 ] '; [ 0 ] && echo true || echo false
echo
printf 'if (("1")) '; if (("1")); then echo true; else echo false; fi
printf ' (("1")) '; (("1")) && echo true || echo false
printf 'if (("0")) '; if (("0")); then echo true; else echo false; fi
printf ' (("0")) '; (("0")) && echo true || echo false
echo
printf 'if (( 1 )) '; if ((1)); then echo true; else echo false; fi
printf ' (( 1 )) '; ((1)) && echo true || echo false
printf 'if (( 0 )) '; if ((0)); then echo true; else echo false; fi
printf ' (( 0 )) '; ((0)) && echo true || echo false
echo
printf 'echo "1<1"|bc '; echo "1<1"|bc >/dev/null && echo true || echo false
printf 'echo "1<0"|bc '; echo "1<0"|bc >/dev/null && echo true || echo false
Mögliche Duplikat von [Bash: Integer Ausdruck erwartet] (http: // Stackoverflow.com/questions/17958855/bash-integer-expression-expected) – tripleee