
bash
コマンドライン引数を取得して、ユーザーのホームディレクトリの下にネストされたディレクトリを作成するスクリプトを書きたいです。例:a/b/c
mkdir -p $1/$2/$3
しかし、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 "$*"