
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 "$*"