Извлечение слов в кавычках в сценарии оболочки - PullRequest
3 голосов
/ 29 октября 2010

Я делаю сценарий оболочки, который автоматизирует процесс установки Arch Linux AUR пакетов .Мне нужно перечислить все зависимости пакета (чтобы проверить, установлены ли они), они выглядят так в скрипте установки:

depends=('sdl' 'libvorbis' 'openal')

Самый простой способ (или идея only )Я мог бы придумать что-то вроде этого:

grep "depends" PKGBUILD | awk -F"'" '{print $2 "\n" $4 "\n" $6;}'

Но количество зависимостей варьируется от пакета к пакету.Итак, как вывести имена в кавычках, если количество слов меняется?

Заранее спасибо,

-скажи

Ответы [ 5 ]

4 голосов
/ 29 октября 2010

Если depends - это всего лишь одна строка, вы можете попробовать вычислить строку в самом bash ... Это приведет к массиву с именем "disabled", который содержит все значения.Кажется хитрым, но не с динамическими языками:

depend_line=`grep depends $PKGBUILD`
eval "${depend_line}"
echo ${depend[0]} # Will print sdl in your example
3 голосов
/ 29 октября 2010

Вы можете избежать проблем безопасности при использовании eval или поиске временного файла с помощью declare:

declare -a "$(grep "depends" PKGBUILD)"

Это создаст массив с именем «depen», содержащий «sdl», «libvorbis» и «openal» на основе данных примера.

1 голос
/ 29 октября 2010

Попробуйте это для размера:

grep "depends" PKGBUILD > /tmp/depends
. /tmp/depends

echo ${depends[@]}

Эй, смотри, это массив?Да, это так.

for d in "${depends[@]}" ; do
    printf '"%s"' "$d"
done

Примечание. В реальном скрипте вы должны быть более осторожны с именами временного файла.

0 голосов
/ 29 октября 2010

awk -F"'" '{for(i=2;i<=NF;i+=2) print($i)}'

0 голосов
/ 29 октября 2010

Вы можете сделать что-то вроде:

grep "depends" PKGBUILD | perl -e "while(<>){print \"\$1\\n\" while m/'.{-}'/g;}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...