2017-06-12 81 views
0

我試圖通過在其中有空格的文件夾列表來運行。這些文件夾看起來像在bash中沒有空格的文件夾名稱數組

/Volumes/SAMPLE 
/Volumes/SAMPlE 1 
/Volumes/SAMPLE 2 

等等。要建立一個包含所有這些文件夾的陣列,我有

dirlist=(`ls -d /Volumes/*${prefix}*`); 

當我運行像

for ((i = 0; i < ${#dirlist[@]}; i++)) 
do 
    echo "${dirlist[$i]}"; 
done 

我得到的文件夾名稱,但空間已經創建了獨立的條目:

/Volumes/SAMPLE 
/Volumes/SAMPLE 
1 
/Volumes/SAMPLE 
2 
/Volumes/SAMPLE 
3 
/Volumes/SAMPLE 
4 
/Volumes/SAMPLE 
5 

我需要做些什麼才能分開數組並將其作爲目錄的一部分包含在內?

謝謝!

+1

相關:[爲什麼你不應該分析'ls'的結果](http://mywiki.wooledge.org/ParsingLs) –

+0

另外,請參閱http://wiki.bash-hackers.org/scripting中的部分/過時提及「分詞」 –

回答

4

簡單don't use ls

dirlist=(/Volumes/*"${prefix}"*) 

舉例會議:

$ cd -- "$(mktemp --directory)" 
$ touch a 'foo bar' z 
$ dirlist=(./*) 
$ printf '%s\n' "${dirlist[@]}" 
./a 
./foo bar 
./z 
+1

可能引用擴展:'Volumes/*「$ prefix」*'。否則,發現。 –

+0

另外,要過濾目錄,'/ Volumes/*「$ prefix」* /'。 (鑑於OP的意圖,可以使用'mkdir'而不是'touch')。 –

+0

@CharlesDuffy這裏不需要引用,是嗎? –

1

find /Volumes -maxdepth 1 -type d -name "*${prefix}*" 

然而,包括文件名和目錄名空間不需要陣列是一個可怕的做法受Windows感染...

+0

名稱中的空格是否是好的實踐看起來相當無關緊要 - 它們是*可能*,因此對它們不健全的代碼有錯誤。 –

相關問題