Unterschied "<->'

A

Alphager

Mitglied
Ich bin gerade dabei, mich ins Thema Unix-Scripting einzuarbeiten und stoße beim nachvollziehen von Scripten immer wieder auf den Gebrauch von deoppelten (") und einfachen (') Anführungszeichen.
Was genau bewirken sie ?
 
Beide dienen dazu, etwas zusammenzufassen. Zum Beispiel lassen sich damit Dateinamen mit Leerzeichen (eine dämliche Windows-Unsitte) ansprechen, etwa
Code:
rm "Dies ist ein File"

Der Unterschied zwischen ' und " liegt darin, wie eingeschlossene Sonderzeichen interpretiert werden. Ein einfaches Beispiel:
Code:
a=test
echo "$a"      ---> liefert test
echo '$a'      ----> liefert $a

Gruss, Phorus
 
Ich stimme Phorus zu mit weiteren Beispielen:
echo "Hallo" -> Hallo
echo "\"Hallo\"" -> "Hallo"
echo ' "Hallo" ' -> "Hallo"

echo "\"Hallo\" das \"ist\" mit \"der\" Zeit \"mühsam\" vorallem \"mit\" viel \$\$!"
-> "Hallo" das "ist" mit "der" Zeit "mühsam" vorallem "mit" viel $$!

echo '"Hallo" das "ist" mit "der" Zeit "mühsam" vorallem "mit" viel $$!'
-> "Hallo" das "ist" mit "der" Zeit "mühsam" vorallem "mit" viel $$!

Geht aber (leider) auch ohne alles in " bzw. ' zu fassen:
echo '$variable' ist nicht zu unterschätzen

Ist jedoch nicht sehr sauber und sollte vermieden werden.

Gruess
Joel
 
Das hat er ja nicht ausgeschlossen ;), würde aber so noch in meiner Ergänzung stehen.
 
um das ganze komplett zu machen gibt es auch noch ` `. Hier wird der Teil in `` quasi in einer eigenen shell ausgeführt und die Ausgabe des Befehls in `` wird eingesetzt.
 
BTW eigene Shell.. das finde ich ein wenig merkwürdig:
[tr0nix@feddie ~]$ echo `export test=blah` blah
blah
[tr0nix@feddie ~]$ echo $test

[tr0nix@feddie ~]$ echo `echo $$` blah
4058 blah
[tr0nix@feddie ~]$ ps -ef | grep 4058
tr0nix 4058 4057 0 23:00 pts/2 00:00:00 /bin/bash
tr0nix 4081 4058 0 23:01 pts/2 00:00:00 ps -ef
tr0nix 4082 4058 0 23:01 pts/2 00:00:00 grep 4058
[tr0nix@feddie ~]$ echo $$
4058
Dachte zuerst Kommandosubstitution ist nicht auf einer neuen Shell, was mir durch die Ausgabe der Prozess-ID ($$) bestätigt wurde. Komischerweise lässt sich dennoch in Kommandosubstitution keine Variablen exportieren.

Komisch.. aber vielleicht bin ich einfach nur zu müde!
 
wobei `foo` äquivalent zu $(foo) ist :)

auf bald
oenone
 
oldschool Fetishist ;). Ok, in den LPIC-1 Prüfungen war das zwar ne Frage...
 
zur Sicherheit eine Rückfrage:
mit ' umschlossener Text wird als reiner Text behandelt ('$a' wird nicht durch den Inhalt von $a ersetzt).
mit " umschloßener Text wird "normal" abgearbeitet, als ob die " nicht vorhanden wären.

Stimmt das so, oder besteht nochmal ein Unterschied zum kompletten weglassen der Anführungszeichen ?
 
Es wird "gruppiert"! Also
Code:
touch "Dies ist ein File"
rm Dies ist ein File    ---> geht nicht
rm "Dies ist ein File"  ---> geht
 
das heißt also:
touch '$test file' -> Datei mit dem Namen "$test file" wird erstellt
touch "$test file" -> Datei mit dem NAmen " file" wird erstellt(sofern $test leer war).

ich glaube, so langsam habe ich es verstanden.
DANKE !
 
Ja genau. Am einfachsten ist sonst immer noch selbst ausprobieren!

Auch lustig:
file="das ist file"
rm $file -> versucht "das", "ist" und "file" zu loeschen
rm '$file' -> versucht "$file" zu loeschen

Loesung:
rm "$file" -> loescht "das ist file"

Also in Shellscripts die mit Variablen arbeiten ist das setzen von "'s sehr angebracht!
 
tr0nix schrieb:
Auch lustig:
file="das ist file"
rm $file -> versucht "das", "ist" und "file" zu loeschen

Das ist auch logisch, weil die Shell zuerst eine Command Substition durchführt,
bevor etwas ausgeführt wird. D.h. es wird zuerst versucht die Kommandozeile
aufzulösen:

rm $file
rm das ist file

und das geht natürlich in die Hose - die " die du vorher bei der Variable $file
gesetzt hast, gehen verloren.
 
schlaubi, das ist mir schon klar. Aber dieser Thread geht darum, jemandem "neuen" die ueblichen Anfaengerprobleme zu erleichtern.
 
@tr0nix: jetzt weisst Du, warum er Schlaubi heisst ;)

@Schlaubi..: Genau genommen handelt es sich nicht um eine Command Substitution, sondern um eine Parameter Expansion.

Gruss, Phorus
 
tr0nix schrieb:
schlaubi, das ist mir schon klar. Aber dieser Thread geht darum, jemandem "neuen" die ueblichen Anfaengerprobleme zu erleichtern.

Sorry, ich wollte dich damit nicht persönlich angreifen.

Phorus schrieb:
Genau genommen handelt es sich nicht um eine Command Substitution, sondern um eine Parameter Expansion.

Stimmt :oldman
 

Ähnliche Themen

Centos und Apache (VirtualHost)

[closed] Eclipse: SSH + Private Key Passphrase

DAViCal-Server: Aufgaben verschwinden

Assembler, Linux und Keyboard HIT-Abfangen

Problem(e) mit NIS im heterogenen Netzwerk

Zurück
Oben