2012-12-05 14 views
7

Mam problem początkującego basha:
Moja ścieżka do utworzenia to /Volumes/ADATA\ UFD/Programming/Qt, gdzie już istnieje /Volumes/ADATA\ UFD. Chciałbym napisać skrypt w następującej formie:Jak wykonać mkdir ze ścieżką zawierającą spacje?

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

Moim problemem jest to, że mkdir tworzy katalog /Volumes/ADATA i ./UFD/Programming zamiast tworzenia /Volumes/ADATA\ UFD/Programming/Qt.

Spojrzałem na this question on SO; jednak żadne z tych rozwiązań nie zadziałało:

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 

Co robię źle? Jaka jest tutaj dobra kombinacja?

+1

Umieszczenie odwrotny ukośnik w nazwie pliku będzie powodować zamieszanie i smutek. Unikaj tego za wszelką cenę. –

Odpowiedz

12

trzeba zacytować zmienne podczas korzystania z nich. Rozszerzone zmienne są poddawane działaniu funkcji wordsplitting. Dobrą praktyką jest zawsze podawać swoją ekspansję, niezależnie od tego, czy spodziewasz się zawierać znaki specjalne czy spacje. Nie musisz również wymieniać spacji podczas cytowania.

Poniższa będą robić to, co chcesz:

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

cudzysłowie zmiennej, gdy przekazywane do komendy mkdir:

mkdir -pv "$outputdir" 
+0

Jego przypisania zmiennych są również niepoprawne, ponieważ będą skutkować dosłownym "\" w nazwie pliku. – jordanm

+0

Ponieważ mówi, że chce odwrotnego ukośnika w nazwie, może to zrobić, choć prawdopodobnie nie mógłby tego zrobić. Zauważyłem to jednak w komentarzu do pytania, a nie w mojej odpowiedzi. –

Powiązane problemy