![Bash 通配符扩展(2)](https://linux22.com/image/593562/Bash%20%E9%80%9A%E9%85%8D%E7%AC%A6%E6%89%A9%E5%B1%95%EF%BC%882%EF%BC%89.png)
如果这个太简单或者之前已经讲过了,我很抱歉……但我希望这里有人能帮忙。我不知道如何扩展路径名中的 * 通配符,除非它后面跟着一个空格。例如,
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
也会起作用