2013-08-08 10 views
8

は、私はこの

#!/bin/bash 
DIR="test_dir/"; 
if [! -d "$DIR"]; then 
    # If it doesn't create it 
    mkdir $DIR 
fi 

のようなコードを持っているしかし、なぜそれは私にこれを与えた実行-d

+3

名前 '['はコマンドの名前であり、ランダムな句読点ではありません。 'cat/etc/passwd'の' cat'と '/ etc/passwd'の間にスペースが必要なので、' ['(コマンド名)と'! '(引数の1つ)の間にスペースが必要です。 。同様に、最後の引数は ']'でなければなりません。この要件は、シェルに 'test'(別名' [')が組み込まれておらず、唯一の' test'コマンドが '/ bin/test 'だった古代の歴史(UNIXの第7版、1978年以前のもの) 'とその(ハード)リンク'/bin/[' –

答えて

19

[と!]の間にスペースを追加します。そして前に]。

#!/bin/bash 
DIR="test_dir/"; 
if [ ! -d "$DIR" ]; then 
    # If it doesn't create it 
    mkdir $DIR 
fi 

それはあなたの変数を引用するのも良い考えです:

mkdir "$DIR" 
8

いくつかのスペースを追加します。

if [ ! -d "$DIR" ]; then 
# ^  ^
1

あなたは、単に言ってしようとする可能性があり:

test -d "${dir}" || mkdir "${dir}" 

これは、ディレクトリを作成するifそれは存在しません。

+3

あるいは、もっと簡単です: 'mkdir -p" $ DIR "'(質問のように大文字の名前を使います)。これにより、パス上に必要なすべてのディレクトリが作成されますが、ディレクトリがすでに存在する場合は成功します。 –

+0

@JonathanLefflerうわー、 'mkdir -p foo'それ自体は何の害も及ぼしません。 – devnull

関連する問題