
Я хочу написать bash
скрипт, который будет получать аргумент командной строки и создавать вложенные каталоги в домашнем каталоге пользователя. Например:a/b/c
mkdir -p $1/$2/$3
Но я хочу создать не просто три уровня каталогов, я хочу получить аргумент командной строки 3 или 5 и создать необходимое количество вложенных каталогов.
решение1
#!/bin/sh
(
IFS=/
mkdir -p "$*"
)
Расширение "$*"
будет строкой в одинарных кавычках, состоящей из всех аргументов скрипта, объединенных вместе с первым символом в $IFS
качестве разделителя. Вот почему мы также $IFS
устанавливаем /
.
Я запускаю это в подоболочке, чтобы избежать настройки IFS
для остальной части скрипта (это меняет поведение определенных вещей, например, как read
работает). Если в скрипте больше ничего нет, вы можете (
выйти )
.
Тестирование:
$ 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
решение2
Вы можете установить разделитель полей $IFS
на /
, тогда "$*"
будет расширено до a/b/c/...
:
IFS=/
mkdir -p "$*"