2016-03-03 70 views
-1

我试图向用户展示包含在一个文件夹中的zip文件列表,并让用户能够选择要详细说明的文件。如何将字符串拆分为数组?

我想要这个

roms=$(ls ~/roms/*.zip) 

PS3="Choose a ROM " 
select opt in "${roms[@]}" "quit"; do 
.... 
done 

的问题是,我的菜单以这种方式表明:

1) /home/realtebo/roms/rom_01.zip 
/home/realtebo/roms/rom_02.zip 
/home/realtebo/roms/rom_02_v2.zip 
.... 
2) quit 

相反,我需要这个

1) /home/realtebo/roms/rom_01.zip 
2) /home/realtebo/roms/rom_02.zip 
3) /home/realtebo/roms/rom_02_v2.zip 
... 
n+1) quit 

如何“爆炸'ls作为数组的结果? 我使用bash下,Linux Mint的17.3

+0

[在Bash中将字符串拆分成数组]可能的副本(http://stackoverflow.com/questions/10586153/split-string-into-an-array-in-bash) – msw

+0

'ls'是多余的*和* [wrong](http://mywiki.wooledge.org/ParsingLs)。使用'roms =(〜/ roms/*。zip)'。 – chepner

回答

3

你并不真的需要一个变量(使用ls填充变量肯定是气馁 - 看http://mywiki.wooledge.org/ParsingLs),这样的代码可以显著简化

PS3="Choose a ROM " 
select opt in ~/roms/*.zip "quit"; do 
    : 

如果在数组要文件名,只使用通配符代替ls(再次,见上面关于链接为什么使用ls休息的东西):

roms=(~/roms/*.zip) 
select opt in "${roms[@]}" "quit"; do 
    : 
+0

是的,非常感谢你,这是有效的,但....我的问题是不同的。我非常想知道如何将ls字符串拆分为数组,以便与select一起使用 – realtebo

+1

不过,不要使用'ls'。现在查看更新的答案。 – tripleee

+0

@realtebo请注意,您的问题是'rom = $(...)'不会创建一个数组;它会创建一个由空格分隔的文件名的扁平字符串。 – chepner