Bash 通配符扩展(2)

Bash 通配符扩展(2)

如果这个太简单或者之前已经讲过了,我很抱歉……但我希望这里有人能帮忙。我不知道如何扩展路径名中的 * 通配符,除非它后面跟着一个空格。例如,

echo $path* $dir

产量

/Data0001 /subfolder 

这正是我想要的,但没有空格。如果我尝试用

echo $path*$dir

我明白了,

/Data*/subfolder

关于如何使 * 在没有空格的情况下扩展,有什么技巧吗?

谢谢。

答案1

将变量名放在花括号中,例如:

echo ${path}*${dir}

答案2

它对整个单词进行模式匹配,而不仅仅是部分匹配${path}*——因此,如果 $path 是“/”,而 $dir 是“/subdirname”,它会查找匹配项/*/subdirname,这实际上是在 / 中查找包含名为 subdirname 的子目录的目录。如果您希望它查找尚未包含 /subdirname 的目录,则必须将其从模式中移除,然后再添加。以下是将匹配项存储在数组中,然后添加子目录的示例:

path="/"
dir="/subdirname"
matchedDirs=("$path"*)
echo "${matchedDirs[@]/%/$dir}"

如果最后的构造很难理解,该[@]部分的意思是“数组的所有元素,每个元素都被视为一个单独的单词”,/%/$dir意思是“用 $dir 替换(每个元素的)末尾”(即将 $dir 附加到每个数组元素)。

答案3

将其更改为

dir=/Data sub=subfolder
echo $dir*/$sub

dir=/Data* sub=subfolder
echo $dir/$sub

也会起作用

相关内容