单引号包裹文件名最安全,可防止shell解析空格;双引号支持变量展开,反斜杠需逐个转义空格;脚本中变量引用必须加引号,否则路径断裂导致误删。

直接用 rm 会误删多个文件
如果你输入 rm file name.txt,shell 会把它拆成三个参数:file、name.txt 和(如果还有空格)更多片段。结果是 rm 尝试删除不存在的 file 和 name.txt,报错同时可能误删其他同名文件。
单引号包裹是最安全的写法
单引号禁止一切 shell 解析,适合纯空格文件名,不会因变量或命令替换出错。
rm 'my document.pdf'ls -l 'log with spaces.log'- 哪怕文件名开头或结尾有空格,比如
' old name.txt',也照常生效
双引号和反斜杠也能用,但要注意差异
双引号允许变量展开,比如 rm "$HOME/my file.txt";反斜杠则需逐个转义空格,容易漏写或多写:
-
rm "data set.csv"—— 可读性好,支持变量 -
rm data\ set.csv—— 每个空格前都要加\,连续两个空格就得写file\ \ name - tab 补全会自动帮你加引号或反斜杠,建议养成按
Tab的习惯
脚本里处理带空格文件名必须加引号
循环中不加引号会导致路径断裂,尤其配合 find 或 ls 输出时:
- 错误写法:
for f in $(ls); do rm $f; done—— 空格会让$f被切开 - 正确写法:
for f in *.txt; do rm "$f"; done或find . -name "*.log" -exec rm {} \; - 更健壮的做法是用
while IFS= read -r配合find -print0


















