forked from blinry/nutsh-vorkurs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path13-quoting.nutsh
75 lines (61 loc) · 3.18 KB
/
13-quoting.nutsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
lesson_name("Quoting")
make_home
"Manchmal möchte man nun nicht, dass die Shell Wildcard-Ersetzungen durchführt. In diesem Fall kann man doppelte Anführungszeichen um den Text setzen."
say("Versuchen Sie, mit `echo` den Text `\\*a\\*` auszugeben.")
prompt {
if output =~ `\*a\*` {
expect("echo \"*a*\"")
break
} else {
if command =~ `\*a\*` {
expect("echo *a*")
"Setzen Sie Anführungszeichen um den Text, ansonsten ersetzt die Shell die Wildcards."
}
}
}
"Die Anführungszeichen helfen auch, wenn Sie mit Dateien arbeiten, die Leerzeichen im Namen haben. In Ihrem Wohnzimmer liegt nun die Datei `10 euro schein`, außerdem die Dateien `10`, `euro` und `schein` - Ihre Aufgabe ist es, mit `cat` den Inhalt der ersten Datei auszugeben."
run(`echo "Dies ist die Datei \"10 euro schein\"" > "$ROOT/wohnzimmer/10 euro schein"`)
run(`echo "Dies ist die Datei \"10\"" > "$ROOT/wohnzimmer/10"`)
run(`echo "Dies ist die Datei \"euro\"" > "$ROOT/wohnzimmer/euro"`)
run(`echo "Dies ist die Datei \"schein\"" > "$ROOT/wohnzimmer/schein"`)
prompt {
if output =~ "Dies ist die Datei \"10 euro schein\"" {
expect(`cd "$ROOT"; cat "wohnzimmer/10 euro schein"`)
break
} else {
if command =~ "10 euro schein" {
if output =~ `"euro` || output =~ `"schein` {
expect(`cd "$ROOT/wohnzimmer"; cat 10 euro schein`)
"Die Shell denkt wegen der Leerzeichen, es wären drei einzelne Dateien gemeint - wenn Sie Anführungszeichen um die drei Wörter setzen, fasst sie es als einen einzigen Parameter auf."
}
}
}
}
"Genau. Neben dem Quoting mit doppelten Anführungszeichen kann man auch mit Paaren von einfachen Anführungszeichen (diesen hier: ') quoten - dies ist noch strenger, und verändert wirklich nichts mehr am Text, während beim doppelten Quoting zum Beispiel noch Variablen ersetzt werden. Sie sehen den Unterschied, wenn Sie versuchen, die Variable `HOME` einmal doppelt und dann einfach gequoted auszugeben."
prompt {
if command =~ "HOME" {
if command =~ "^echo" && output =~ "\\$HOME" {
expect("echo '$HOME'")
break
}
if ! command =~ "echo" {
expect("'$HOME'")
"Zur Ausgabe einer Variable können Sie `echo` benutzen."
}
if ! command =~ "\\$HOME" {
expect("echo HOME")
"Denken Sie dran, zur Ausgabe einer Variable kommt ein Dollarzeichen davor."
}
}
}
"Genau. Das war's zum Thema Quoting."
"Wenn Sie Lust haben, laden wir Sie jetzt noch ein, zur Vorbereitung auf eine kommende Lektion ein kleines Browserspiel zu spielen: Es wird Ihnen beibringen, mit sogenannten *regulären Ausdrücken* umzugehen, die ein bisschen mehr können als` *` und` ?` - und somit eine sehr mächtige Art und Weise bereitstellen, in Texten zu suchen."
"Die Seite heißt *Regex Crossword*: http://regexcrossword.com/challenges/tutorial/puzzles/1"
"Oben rechts unter \"Help\" finden Sie alle notwendigen Informationen. Bei Fragen sind wir gerne für Sie da!"
"Diese Lektion ist damit dann auch `fertig`."
prompt {
if ready {
expect("echo fertig")
break
}
}