2014-02-28 57 views
0

請隨意將問題重命名爲更合適的內容。如何使用bash來模仿zsh創建並循環訪問外殼中的文件夾數組

mkdir folder1 
mkdir folder2 
mkdir folder3 

# zsh 

folders=(folder*) | print $folders 
#folder1 folder2 folder3 

# bash 

folders=(folder*/) | echo $folders 
#folder1 

正如你所看到的,這隻輸出第一個元素。

任何指針,將不勝感激,謝謝。

+0

您的文件夾是否位於同一目錄中? – zee

+0

感謝您的評論。對,他們是。 –

回答

4

嘗試將其更改爲:

folders=(folder*); echo "${folders[@]}" 
  • folders[@]給出陣列
  • ${}中的所有元素從上面的命令的bash擴展的輸出。
+0

感謝您的評論...你確定這有效嗎?得不到這個輸出... –

+0

@jO它可以工作,如果您將回聲分隔到不同的行,或者如果您添加分號而不是管道命令之間。 –

+0

這適用於我。只需複製並粘貼。 @jO,你在bash中使用管道運算符是不正確的,這可能是你的問題的一部分。這個答案正確使用分號。 –

0

如果可以這麼說,某個目錄中有多個.txt文件,並且您希望獲取/顯示這些文件夾。你可以嘗試這樣的事情:

declare -a folder_arr 
i=0 


for dir in *.txt; do 

folder_arr[i]=$dir 
i=$((i+1)) 
done 

for j in $(seq 0 $((i-1))) 
do 
echo ${folder_arr[$j]} 
done 

我執行了上述文件,並能夠得到預期的reult。

/temps$ ./dirrr.sh 
    z.txt 
+0

不要像這樣遍歷'find'的輸出。有關詳細信息,請參見[此bash陷阱](http://mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29)。 – chepner

+0

嘿@chepner感謝您的反饋。你是對的....我以前沒有訪問過linux機器來嘗試它......但是,知道我是這樣做的。我已經修復它按照「這個bash陷阱」,現在它工作正常.....採取弓:) – zee