Прошу прощения, если это слишком просто или было рассмотрено ранее ... но я надеюсь, что кто-то здесь может помочь. Я не могу понять, как расширить подстановочный знак * в имени пути, если за ним не следует пробел. Например,
echo $path* $dir
дает
/Data0001 /subfolder
что я хочу, но без места. Если я попытаюсь убрать пространство с помощью,
echo $path*$dir
Я получил,
/Data*/subfolder
Любые советы о том, как заставить * расширяться без пробелов?
Спасибо.
Поместите имя (имена) переменных в фигурные скобки, например:
echo ${path}*${dir}
Он выполняет сопоставление с образцом для всего слова, а не только для ${path}*
часть - поэтому, если $ path был "/", а $ dir был "/ subdirname", он будет искать совпадения с /*/subdirname
, который, по сути, ищет каталоги в /, содержащие подкаталоги с именем subdirname. Если вы хотите, чтобы он находил каталоги, которые еще не содержат / subdirname, вы должны оставить это вне шаблона и добавить его позже. Вот пример, в котором совпадения сохраняются в массиве, а затем добавляется подкаталог:
path="/"
dir="/subdirname"
matchedDirs=("$path"*)
echo "${matchedDirs[@]/%/$dir}"
Если эту последнюю конструкцию трудно разобрать, то [@]
часть означает «все элементы массива, каждый из которых рассматривается как отдельное слово», и /%/$dir
означает «заменить конец (каждого элемента) на $ dir» (т.е. добавить $ dir к каждому элементу массива).
Измените это на
dir=/Data sub=subfolder
echo $dir*/$sub
.
dir=/Data* sub=subfolder
echo $dir/$sub
также будет работать