2012-12-05 9 views
7

私はbash初心者の問題があります:
私のパスは/Volumes/ADATA\ UFD/Programming/Qtです。ここでは/Volumes/ADATA\ UFDがすでに存在します。私は、次の形式でスクリプトを記述したいと思います:スペースがあるパスでmkdirを実行するには?

# create a single output directory 
outputdir="/Volumes/ADATA\ UFD/Programming/Qt" 
mkdir -pv $outputdir 

私の問題は、mkdir、ディレクトリ/Volumes/ADATA、代わりに/Volumes/ADATA\ UFD/Programming/Qtを作成する./UFD/Programmingを作成することです。

私はthis question on SOを見ました。ただし、これらのソリューションのいずれも機能しませんでした:

outputdir=/Volumes/"ADATA\ UFD/Programming/Qt" 
mkdir -pv $outputdir 

outputdir=/Volumes/'ADATA\ UFD/Programming/Qt' 
mkdir -pv $outputdir 

outputdir='/Volumes/ADATA\ UFD/Programming/Qt' 
mkdir -pv $outputdir 

outputdir=/Volumes/ADATA' 'UFD/Programming/Qt 
mkdir -pv $outputdir 

私は間違っていますか?ここで良い組み合わせは何ですか? mkdirコマンドに渡された変数の周り

+1

は混乱と悲しみを引き起こすことが起こっています。それを避けてください。 –

答えて

12

あなたがそれらを使用する場合、変数を引用する必要があります。拡張された変数は単語区切りを受けます。特殊文字やスペースを含むかどうかに関係なく、常に展開を引用することをお勧めします。引用の際にスペースを逃す必要もありません。以下は、あなたが望むものを

を行います:ファイル名にバックスラッシュを置く

outputdir='/Volumes/ADATA UFD/Programming/Qt' 
mkdir -pv "$outputdir" 
11

二重引用符:

mkdir -pv "$outputdir" 
+0

変数の代入も間違っています。その結果、ファイル名にはリテラル '\'が返されます。 – jordanm

+0

名前にバックスラッシュが欲しいと言うので、彼はそれをすることはできますが、彼はおそらくそれをしてはいけません。私は、私の答えではなく、質問へのコメントでそれを指摘しました。 –

関連する問題