我正在使用 bash shell 脚本使用以下脚本删除目录中的某些文件
#!/bin/bash
path=$1
for filename in $path/*; do
if [ -d "$filename" ]; then
echo $filename
rm $filename/*statssys*
fi
done
换句话说,它正在循环遍历指定路径内一层深处的所有目录,并删除statssys
该名称中包含的所有文件。问题是检索到的文件路径$filename
包含数字结尾,例如file_path[8]
或file_path[9]
。在命令运行之前必须转义方括号rm
,我不知道该怎么做,因为它们隐藏在 $filename 变量中。
任何帮助表示赞赏。
答案1
在 Bash 脚本中,临时程序员可能会陷入许多陷阱。
一条规则是对每个参数扩展加双引号,这是您的主要问题。其他一些规则包括避免echo
输出任意数据和用于--
将选项与其他参数分开防止出现开头-
但不应该被视为选项的争论。
在您的示例中,您可以将脚本更改为:
#!/bin/bash --
path="$1"
for filename in "$path"/*; do
if [ -d "$filename" ]; then
printf '%s\n' "$filename"
rm -- "$filename"/*statssys*
fi
done
如需更详细的解释,我强烈建议您阅读重击陷阱。