3 Stimmen

Test auf einen Punkt in der Bash

Wie kann ich testen, ob eine Zeichenfolge Punkt in Bash ist? Ich habe dies versucht:

if [ "$var" = "." ]

und dies:

if [ "$var" = "\." ]

Aber es funktioniert nicht.

4voto

Mark Byers Punkte 761508

Funktioniert bei mir:

$ d=.
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi
yes
$ d=foo
$ if [ $d = '.' ];then echo 'yes'; else echo 'no'; fi
no

1voto

Tim Post Punkte 32750

Mein Code:

#!/bin/bash

var="."

[ $var = "." ] && echo "Yup, it equals '.'"

exit 0

Welche Drucke:

Yup, it equals '.'

Getestet:

tpost@tpost-desktop:~$ /bin/bash -x ./foo.sh
+ var=.
+ '[' . = . ']'
+ echo 'Yup, it equals '\''.'\'''
Yup, it equals '.'
+ exit 0

Sie haben wahrscheinlich etwas Leerraum in $var (oder vielleicht $var leer ist?), lassen Sie es durch /bin/sh -x ./yourscript.sh um zu sehen, was er tatsächlich vergleicht.

Denken Sie daran, \== es un Bashismus funktioniert es nur in Bash. Es ist als Komfort für Leute gedacht, die an ein einzelnes System gewöhnt sind. \= was zu einer Auftrag Das ist in Ordnung, wenn Sie nur die Bash verwenden, aber Sie wissen nie, worauf /bin/sh auf manchen Systemen verweist. Es ist besser, einfach zu verwenden \= und das Problem gänzlich zu vermeiden.

0voto

unwind Punkte 377331

Versuchen Sie, die Gleichheitszeichen zu verdoppeln ( == ), ist Vergleichen nicht dasselbe wie Zuordnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X