2016-08-08 5 views
-1

を動作していない場合:それはコードifがそう思える条件はbashスクリプトでたとえば

#!/bin/bash 
DIR=`dirname $0 ` 
Save_DIR="Save" 
cd $DIR 

if [ -d $Save_DIR ];then 
    rm $Save_DIR/* 
else 
    mkdir $Save_DIR 
fi 

for i in $(ls) 
do 
    if [ $i==$Save_DIR ] 
    then 
     echo "is same " 
    fi 
done 

I「は同一である」正しい結果がラインだと思いますが、私たちは、私は

is same 
is same 
is same 
is same 
is same 
is same 
is same 
is same 
is same 
is same 

それを実行します何もない、なぜ?

+0

は見てみてください。

for i in * 

はディレクトリのみを一致させるには:また

lsを解析していない、あなたは簡単のように、ここでシェルグロブを使用することができます.net/ – Cyrus

答えて

1

の周囲に空白を指定していないため、文字列が空でないかどうかをテストするために、これは必ず[ -n $i==$Save_DIR ]のテストを行っています。あなたがする必要がある

[ "$i" = "$Save_DIR" ] 

==はbashのイズムですが、[は、あなたの代わりに=を使用する必要がありますので、ありませんが、bashを使用している場合に動作します。単語の分割とファイル名の拡張を防ぐために、[を使用して変数を引用します。ます。http://www.shellcheck

for i in */ 
+0

dirを変更した後でテストを追加します '' 'cd $ DIR ||出口1''' –

関連する問題