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
Bash: Unterschied zwischen [ und [[
Re: Bash: Unterschied zwischen [ und [[
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)
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)
- 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 [[
(( var1 == var2 )) ist auch eine Kurzform von let
Einigermassen reinkopiert
Bash ist ja abwärtskompatibel, dh. andere Sachen funktionieren auch
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
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 : -)
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 : -)
-
- Beiträge: 134
- Registriert: 03.02.2011 11:11:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Frankfurt
Re: Bash: Unterschied zwischen [ und [[
"test" und "[" sind (mittlerweile) Shell-Builtins:
Aber immer noch als externe Programme vorhanden:
test bzw. [ führen Stringvergleiche durch, aber keinen Mustervergleich:
Mit [[ ]] kann ein Mustervergleich durchgeführt werden:
Code: Alles auswählen
$ type test [
test is a shell builtin
[ is a shell builtin
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
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