2015-06-30 3 views
2

У меня есть следующее значение сохраняется в переменной - модельРазвернуть Filepath шаблон, хранящийся в переменной в Баш

$WS/*.asd 

В моей среде $ WS вычисляет допустимый каталог (/ главная/администратор/DEV/рабочее пространство /). В этом каталоге есть некоторые .asd-файлы. Я хочу развернуть переменную pattern во все соответствующие файлы .asd в этом каталоге. Тем не менее, я пробовал следующие команды, но ни один из них не работает:

expand "$pattern" 
expand: $WS/*.asd: No such file or directory 

ls $pattern 
ls: cannot access $WS/*.asd: No such file or directory 

eval $pattern 
/home/administrator/dev/workspaces/a.asd: Permission denied 

echo $pattern 
$WS/*.asd 

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

EDIT: Объясните проблему более подробно

я могу получить любую комбинацию ENV-переменных и групповых символов в любой последовательности. Например, вход может быть: /home/$USER/*/$DIR/*.my_extension. Проблема в том, что я хочу оценить все env-vars и развернуть подстановочные знаки.

ответ

3

Кроме eval вы можете попробовать это find:

pattern='$WS/*.asd' 

find "$WS" -name "${pattern##*/}" 

EDIT: Основываясь на отредактированном вопрос, кажется, вы должны будете использовать:

eval echo "$pattern" 
+0

К сожалению, я не был достаточно пояснительными. Это решение предполагает, что я знаю, как извлечь каталог. Я могу получить любую последовательность env-vars и wildcards. Например, '/home/$USER/*/$DIR/*.my_extension '. – egelev

+2

Хмм в этом случае' eval echo' $ pattern "' – anubhava

+1

Спасибо. Действительно, это работает так, как мне нужно, чтобы он работал. отредактируйте свой ответ, поместив его в него, и я отметю его. – egelev

1

Вы можете сохраните все элементы, следующие за шаблоном в массиве:

#!/bin/bash 
arr=() 
shopt -s nullglob # expand the glob pattern to a null sting if no elements caught 
arr+=($WS/*.asd) 
shopt -u nullglob # undo the 'shopt -s nullglob' 

Для печати записей:

for entry in "${arr[@]}"; do 
    echo "$entry" 
done 
Смежные вопросы