
Ich möchte ein bash
Skript schreiben, das ein Befehlszeilenargument erhält und verschachtelte Verzeichnisse unter dem Benutzer-Home-Verzeichnis erstellt. Beispiel:a/b/c
mkdir -p $1/$2/$3
Aber ich möchte nicht nur drei Verzeichnisebenen erstellen, sondern das Befehlszeilenargument 3 oder 5 erhalten und die erforderliche Anzahl verschachtelter Verzeichnisse erstellen
Antwort1
#!/bin/sh
(
IFS=/
mkdir -p "$*"
)
Die Erweiterung von "$*"
ist eine Zeichenfolge in einfachen Anführungszeichen, die aus allen Argumenten des Skripts besteht, die mit dem ersten Zeichen von $IFS
als Trennzeichen aneinandergereiht sind. Aus diesem Grund setzen wir auch $IFS
auf /
.
Ich führe das in einer Subshell aus, um Einstellungen IFS
für den Rest des Skripts zu vermeiden (es ändert das Verhalten bestimmter Dinge, z. B. wie read
funktioniert). Wenn das Skript nichts anderes enthält, können Sie (
es )
weglassen.
Testen:
$ tree
.
`-- script.sh
0 directory, 1 file
$ ./script.sh 1 2 3 4 {a..k}
$ tree
.
|-- 1
| `-- 2
| `-- 3
| `-- 4
| `-- a
| `-- b
| `-- c
| `-- d
| `-- e
| `-- f
| `-- g
| `-- h
| `-- i
| `-- j
| `-- k
`-- script.sh
15 directories, 1 file
Antwort2
Sie können den Feldtrenner $IFS
auf setzen /
, dann "$*"
wird er wie folgt erweitert a/b/c/...
:
IFS=/
mkdir -p "$*"