2017-02-09 43 views
1

我有这样的文件:列出文件

abc.json 
xyz.json 
pdf.json 

我想获得这样的结果没有“JSON”扩展名:

somearray=(abc, xyz, pdf) 
+1

数组中的逗号没有任何意义。你拥有它的想法是什么?你有没有尝试解决这个问题? – Inian

回答

2

你可以这样做仅仅用这个:

some_array=($(ls | sed 's/.json$//')) 

或者,如果你只是在寻找.json文件,那么:

some_array=($(ls | grep '.json$' | sed 's/.json$//')) 

上面的方法,如果你有一个在他们空格或通配符(*)的任何文件是不是安全。

如果你正在使用bash,那么你可以使用参数扩张采取延长了。而这种做法是比前者更强劲 - 它负责处理与空格或通配符正常文件:

declare -a some_array 
for file in *.json; do 
    some_array+=("${file%.json}") 
done 

查看这些信息:

+1

在参数扩展中添加引号没有什么问题,实际上它是最有效的。 – Inian

+0

事实上,它是处理空间文件所必需的。更正,感谢您的注意,@Inian。 – codeforester

+1

你可以做远比解析ls'的'输出,并使用grep的'好/ sed'背靠背使情况变得更糟。在前两种情况下,每个词都有分裂的机会。最好不要推荐前两种方法。 – Inian

3

你可以得到你的文件到一个数组与通配符,然后删除扩展参数扩展:

$ arr=(*.json) 
$ declare -p arr 
declare -a arr='([0]="abc.json" [1]="pdf.json" [2]="xyz.json")' 
$ arr=("${arr[@]%.json}") 
$ declare -p arr 
declare -a arr='([0]="abc" [1]="pdf" [2]="xyz")'