2017-02-09 29 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")'