打击通配符扩展(2)

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

echo $path* $dir 

产量

 /Data0001 /subfolder 

这是我想要的,但没有空间。 如果我试图拿出空间,

 echo $path*$dir 

我明白了

 /Data*/subfolder 

任何提示如何让*扩展没有空白?

谢谢。

将variables名放在大括号中,例如:

 echo ${path}*${dir} 

它在整个单词上进行模式匹配,而不仅仅是${path}*部分 – 所以如果$ path是“/”,$ dir是“/ subdirname”,它会查找与/*/subdirname匹配,在包含名为subdirname的子目录的/中查找目录。 如果您希望它find不包含/ subdirname的目录,则必须将其保留在模式外,并在稍后添加。 下面是一个将匹配存储在数组中的示例,然后添加子目录:

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

如果最后的结构很难做出来, [@]部分意味着“数组中的所有元素,每个元素都被视为一个单独的词”, /%/$dir意思是“用每个元素replace$ dir “(即追加$ dir到每个数组元素)。

将其更改为

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

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

也会工作