Нежелательное расширение оболочки при назначении вывода команды оболочки переменной - PullRequest
0 голосов
/ 16 июня 2010

Я экспортирую часть локального репозитория прототипов svn для импорта в другое хранилище. У нас есть несколько свойств svn, установленных в репозитории, поэтому я решил написать скрипт для перечисления элементов файла и их соответствующих свойств. Как трудно это может быть правильно.

Итак, я начал писать сценарий bash, который присваивал бы вывод переменной svn proplist -v переменной, чтобы я мог проверить, имеет ли указанный файл какие-либо свойства.

#!/bin/bash
o=$(svn proplist -v "$1")
echo $o

теперь это работает нормально и выводит вывод команды svn proplist. Но если команда proplist возвращает что-то вроде

svn:ignore : * build

выполняет расширение оболочки для * и вставляет весь список каталогов до значения свойства сборки. Поэтому, если в каталоге есть a.txt, b.txt и файлы build / dirs, выходные данные будут выглядеть так.

svn:ignore : a.txt b.txt build

Я полагаю, что мне нужно каким-то образом избежать вывода или чего-то еще, чтобы не допустить расширения, но пока не найдено что-то, что работает. Есть и другие способы сделать это, но я ненавижу, когда не могу что-то понять. и я должен администратор, я думаю, что этот избил меня (хорошо, учитывая время, которое я могу потратить на это)

Ответы [ 2 ]

2 голосов
/ 16 июня 2010
echo "$o"

предотвратит расширение значения.

1 голос
/ 16 июня 2010

Хотя он выполняет расширение оболочки, он выполняется в эхо. Чтобы увидеть это, введите set -x в вашем bash-скрипте. Вот пример:

#!/bin/sh
set -x
o=$(echo 'one two *')
echo $o

А вот вывод, который вы должны увидеть:

++ echo 'one two *'
+ o='one two *'
+ echo one two others from expansion

И если вы цитируете $o, все работает правильно:

++ echo 'one two *'
+ o='one two *'
+ echo 'one two *'
one two *

Вы также можете попробовать set -v.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...