在文件名中转义空格不适用于脚本内部

时间:2015-01-02 11:33:00

标签: bash shell escaping

在命令行中,此cat按预期工作:

cat /home/me/path\ with\ spaces/to/file

但如果我把它放在一个脚本中:

#!/bin/bash

FILE="$1" 
cat $FILE # cat "$FILE" gives same result

并使用./script.sh "/home/me/path\ with\ spaces/to/file"调用脚本,我得到:

cat: /home/me/path\ with\ spaces/to/file: No such file or directory

请注意转义引号,它应位于正确的位置。

是什么给出了?

1 个答案:

答案 0 :(得分:1)

只需使用双引号来防止分词:

cat "$FILE"

另外,应为shell内部变量保留大写变量名,因此您应将FILE更改为file

如果你引用你的脚本的参数(这是一个好主意),那么文件名不需要反斜杠:

./script.sh "/home/me/path with spaces/to/file"