在 Bash 中,通配符(如 *
和 ?
)通常在命令行中直接使用,以匹配文件名或其他字符串。然而,有时你可能希望将这些通配符存储在变量中,并在后续的命令或脚本中使用它们。默认情况下,Bash 不会在变量扩展时处理通配符。但你可以通过几种方法实现这一目标。
eval
命令eval
命令可以执行其参数中的字符串作为命令。通过这种方式,你可以让 Bash 在变量扩展时处理通配符。
files="*.txt"
eval ls "$files"
在这个例子中,eval ls "$files"
实际上会执行 ls *.txt
。
find
命令如果你想在变量中存储一个通配符模式,并使用它来查找文件,你可以结合使用 find
命令。
pattern="*.txt"
find . -name "$pattern"
在这个例子中,find . -name "$pattern"
会查找当前目录及其子目录中所有匹配 *.txt
模式的文件。
如果你想将多个匹配项存储在一个变量中,可以使用数组。
files=(*.txt)
for file in "${files[@]}"; do
echo "$file"
done
在这个例子中,files=(*.txt)
会将所有 .txt
文件的名称存储在数组 files
中,然后你可以遍历这个数组并处理每个文件。
eval
命令时要特别小心,因为它会执行传入的字符串作为命令。确保你信任传入的内容,以避免潜在的安全风险。find
命令可能更高效。通过这些方法,你可以灵活地在 Bash 脚本中使用和处理通配符,从而提高脚本的通用性和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云