Bash: Unterschied zwischen [ und [[

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Bash: Unterschied zwischen [ und [[

Beitrag von bumer » 28.01.2015 13:38:31

Hallo,

Ich weiß leider nicht wo ich nachlesen kann was der Unterschied zwischen

if [[ $answer == "y" ]] ; then mkdir $dir ; fi

und

if [ $answer = "y" ] ; then mkdir $dir ; fi

ist. [ ist test, das ist klar. Was ist aber mit der Doppelklammer [[ - wann und wofür nützt man die?

Grüße,
bumer

JuergenPB

Re: Bash: Unterschied zwischen [ und [[

Beitrag von JuergenPB » 28.01.2015 15:01:16

Oft ist es ziemlich egal, ob man einfache oder doppelte eckige Klammern setzt. Mit doppelten liegt man normalerweise nicht falsch.

Ich meine es ist so (bin mir aber nicht wirklich sicher):
einfache eckige Klammern [ … ] → testen mit externem Programm test
doppelte eckige Klammern [[ … ]] → testen mit interner Routine (bei bash)

zudem:
doppelte runde Klammern (( … )) → testen von Zahlen (bei bash)

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: Bash: Unterschied zwischen [ und [[

Beitrag von Inkodiktus » 28.01.2015 15:18:13

(( var1 == var2 )) ist auch eine Kurzform von let


Einigermassen reinkopiert :(

Code: Alles auswählen

Ausdruck fuer	Ohne Klammern		    Klammerung		  Shell
Zeichenketten 	[[ Ausdruck ]] 		([[ Ausdruck ]]) 	Bash und Korn
Zeichenketten 	[ Ausdruck ] 		[ \( Ausdruck \) ] 	alle Shells
Zahlenwerte 	(( Ausdruck )) 		( (( Ausdruck )) ) 	Bash und Korn
Zahlenwerte 	[ Ausdruck ] 	    [ \( Ausdruck \) ]        alle Shells
Dateitest 	   [ Ausdruck ] 	     [ \( Ausdruck \) ]  alle Shells
Dateitest 	   [[ Ausdruck ]]         ([[ Ausdruck ]]) 	   nur Korn
Bash ist ja abwärtskompatibel, dh. andere Sachen funktionieren auch :)
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Bash: Unterschied zwischen [ und [[

Beitrag von newdeb » 28.01.2015 17:46:39

"test" und "[" sind (mittlerweile) Shell-Builtins:

Code: Alles auswählen

$ type test [
test is a shell builtin
[ is a shell builtin
Aber immer noch als externe Programme vorhanden:

Code: Alles auswählen

$ ls -l $(which test [)
-rwxr-xr-x 1 root root 39552 Jan 14 04:50 /usr/bin/[
-rwxr-xr-x 1 root root 35456 Jan 14 04:50 /usr/bin/test
test bzw. [ führen Stringvergleiche durch, aber keinen Mustervergleich:

Code: Alles auswählen

$ VAR=foo
$ [ $VAR = foo ] && echo JA
JA
$ [ $VAR = f* ] && echo JA


Mit [[ ]] kann ein Mustervergleich durchgeführt werden:

Code: Alles auswählen

$ VAR=foo
$ [[ $VAR == f* ]] && echo JA
JA

Antworten