2012-01-29 3 views
0

У меня есть переменная, содержащая wildarded дескрипторов файлов:Bash переменная, содержащая файл подстановочные

FORMATS='*.mobi *.pdf *.txt *.epub *.lit' 

Он получает расширенную с соответствующими файлами, если я пишу

echo $FORMATS 

и сохраняет его строковое значение, если я процитирую

echo "$FORMATS" 

Теперь, мне нужно управлять им как строкой, и я это делаю.

SUBST=`echo "$FORMATS" | sed "s/$1//"` 

Проблема в том, что внутри `` файлы все равно расширяются. Как предотвратить это? Благодарю.

+0

Действительно? Вы пробовали «эхо» $ SUBST «'? – choroba

ответ

3

Нет, он не расширяется!

Возможно, вы используете SUBST без кавычек (например: echo $SUBST), а затем он расширяется ... используйте "$SUBST".

1

Это может работать для вас:

cd /tmp/formats 
touch a.mobi b.pdf c.txt e.epub f.lit 
a='*.mobi *.pdf *.txt *.epub *.lit' 
echo "$a" 
*.mobi *.pdf *.txt *.epub *.lit 
echo $a 
a.mobi b.pdf c.txt e.epub f.lit 
b=pdf 
c=$(echo "${a/\*.$b}") 
echo "$c" 
*.mobi *.txt *.epub *.lit 
echo $c 
a.mobi c.txt e.epub f.lit 
0

, не видя больше кода, я могу только догадываться, что, возможно, вы хотите сделать что-то вроде этого:

: это не только оболочка - никакие другие инструменты необходимо

for FILE in *.mobi *.pdf *.txt *.epub *.lit ; do 
    case "$FILE" in 
     "*.mobi"|"*.pdf"|"*.txt"|"*.epub"|"*.lit")continue;; 
     *)echo "${FILE//$1/}";; 
    esac 
done 

Предположительно, у вас есть mv или cp файл для нового имени файла ???

Смежные вопросы