
Quiero escribir un bash
script que obtenga un argumento de línea de comando y cree directorios anidados en el directorio de inicio del usuario. P.eja/b/c
mkdir -p $1/$2/$3
Pero no solo quiero crear tres niveles de directorios, quiero obtener el argumento 3 o 5 de la línea de comando y crear la cantidad necesaria de directorios anidados.
Respuesta1
#!/bin/sh
(
IFS=/
mkdir -p "$*"
)
La expansión de "$*"
será una cadena entre comillas simples que constará de todos los argumentos del script concatenados junto con el primer carácter de $IFS
como delimitador. Es por eso que también $IFS
configuramos /
.
Lo estoy ejecutando en un subshell para evitar la configuración IFS
del resto del script (cambia el comportamiento de ciertas cosas, como cómo read
funciona). Si no hay nada más en el guión, puedes salir (
y )
salir.
Pruebas:
$ 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
Respuesta2
Puede configurar el separador entre campos $IFS
en /
, luego "$*"
se expandirá a a/b/c/...
:
IFS=/
mkdir -p "$*"