Шаблон сценария оболочки, заключающий в себе двойные кавычки вокруг значений массива, игнорируя разделитель пробела в компоненте - PullRequest
0 голосов
/ 29 марта 2020

Я хочу заключить все значения массива в двойные кавычки, игнорируя разделитель пробела в компоненте.

, например, для запуска нижеприведенного сценария bash

#!/bin/bash

git checkout deltafinal

metaItems="$(git diff HEAD~1 --name-only)"  #components involved in very last commit in git

# OUTPUT: metaItems=src/profiles/API Only.profile src/profiles/Chatter External User.profile

array=($(echo $metaItems | sed 's! src/!,src/!g'))

# OUTPUT: array= metaItems=src/profiles/API Only.profile,src/profiles/Chatter External User.profile

Сейчас Я хочу поместить двойные кавычки вокруг каждого значения массива, начиная с ключевого слова "src /", заканчивая до ".profile", и сохранять их в массиве.

Ожидаемый результат:

"src/profiles/API Only.profile","src/profiles/Chatter External User.profile"

PS Следует игнорировать все пробелы между / API и Only & / Chatter External User, как показано выше.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 29 марта 2020

Следующее присваивает каждое имя файла элементу массива, если ни одно из ваших имен файлов не имеет встроенных символов новой строки.

#!/bin/bash

git checkout deltafinal

IFS_SAVE=$IFS
IFS=$'\n'
array=( $(git diff HEAD~1 --name-only) )
IFS=$IFS_SAVE

# example: print array
declare -p array

# example: iterate over array
for path in "${array[@]}" ; do
    printf "path=%s\n" "$path"
done
...