Mám súbory ako:
abc.json
xyz.json
pdf.json
Chcem získať takýto výsledok bez rozšírenia „json“:
somearray=(abc, xyz, pdf)
odpovede:
2 pre odpoveď č. 1Môžete to urobiť jednoducho:
some_array=( $(ls | sed "s/.json$//") )
Alebo, ak len hľadáte .json
súborov, potom:
some_array=( $(ls | grep ".json$" | sed "s/.json$//") )
Vyššie uvedená metóda nie je bezpečná, ak máte nejaké súbory, ktoré majú medzery alebo zástupný znak (*
) v nich.
Ak používate Bash, potom môžete použiť parameterrozšírenie, aby sa rozšírenie. A tento prístup je robustnejší ako tie skoršie - spracováva súbory s bielymi medzerami alebo zástupným znakom:
declare -a some_array
for file in *.json; do
some_array+=( "${file%.json}" )
done
Pozrite si tieto príspevky:
3 pre odpoveď č. 2
Svoje súbory môžete dostať do poľa s globbingom a potom odstrániť rozšírenia s rozšírením parametrov:
$ 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")"