スペースを処理できるほど強力なスクリプトを作成しようとしています。
現在 for ループにありますが、問題は名前にスペースがあるフォルダーです。
ASOURCE="Home Photos 2012 camcorder" #example filename
if [ -d "$(echo $ASOURCE)" ] # If directory exists
then
#command
else
echo "File does not exist: " $1 #Error
echo "DIR :" $(echo $ASOURCE | sed 's/\ /\\ /g')
fi
確認に失敗しました。あらかじめスペースから脱出しようとしましたが、役に立ちませんでした。
答え1
あなたはする必要がありますいつも(*)特にランダムなユーザー入力が含まれている場合は、変数を参照してください。
この場合、次のスクリプトを使用して作成した場合強く打つ、二重括弧を使用すると、引用符は必要ありません(bashはこれについてスマートです)。そして、printf "%q"
bashを使用してエスケープが必要な項目をエスケープします。
ASOURCE="Home Photos 2012 camcorder" #example filename
if [[ -d $ASOURCE ]]; then
# directory exists
:
else
# Note how these vars are quoted:
echo "File does not exist: $1"
printf "DIR : %q\n" "$ASOURCE"
fi
(*) 知らない限り正確に参照したくないとき。