Mam pliki takie jak:
abc.json
xyz.json
pdf.json
Chciałbym uzyskać taki wynik bez rozszerzenia "json":
somearray=(abc, xyz, pdf)
Odpowiedzi:
2 dla odpowiedzi № 1Możesz to zrobić po prostu za pomocą tego:
some_array=( $(ls | sed "s/.json$//") )
Lub, jeśli szukasz tylko .json
pliki, a następnie:
some_array=( $(ls | grep ".json$" | sed "s/.json$//") )
Powyższa metoda nie jest bezpieczna, jeśli masz jakiekolwiek pliki z białą spacją lub symbolem wieloznacznym (*
) w nich.
Jeśli używasz Bash, możesz użyć parametrurozszerzenie w celu rozszerzenia. A to podejście jest bardziej niezawodne niż wcześniejsze - obsługuje pliki z białymi spacjami lub wieloznacznymi znakami wdzięczności:
declare -a some_array
for file in *.json; do
some_array+=( "${file%.json}" )
done
Zobacz te posty:
- Jak usunąć rozszerzenie nazwy pliku w skrypcie powłoki?
- Wyodrębnij nazwę pliku i rozszerzenie w Bash
3 dla odpowiedzi № 2
Możesz pobrać swoje pliki do tablicy z globbingiem, a następnie usunąć rozszerzenia z rozszerzeniem parametrów:
$ 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")"