У мене є такі файли:
abc.json
xyz.json
pdf.json
Я хотів би отримати такий результат без розширення "json":
somearray=(abc, xyz, pdf)
Відповіді:
2 для відповіді № 1Ви можете зробити це просто:
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
Перегляньте ці повідомлення:
3 для відповіді № 2
Ви можете отримати ваші файли в масив з globbing, а потім видалити розширення з розширенням параметра:
$ 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")"