如何在BASH中使用文件名中的空格cat文件?

时间:2015-04-03 17:36:56

标签: bash filenames cat

我尝试使用名为cat的{​​{1}}文件。我写的时候

file sth.txt

效果很好。

当我将cat "file sth.txt" 保存到变量file sth.txt并执行

file

系统写入

cat "$file"

我希望cat: file: No such file or directory cat: sth.txt: No such file or directory 文件包含变量,并且包含多个文件名。对于没有空格的文件名,它可以工作。有人可以给我一些建议吗?

4 个答案:

答案 0 :(得分:3)

你必须像这样分配变量:

file="file sth.txt"

或:

file="$1"

答案 1 :(得分:2)

您确定您的变量包含正确的数据吗?您也应该使用""''或使用来转义变量中的路径:

rr-@luna:~$ echo test > "file sth.txt"
rr-@luna:~$ var=file\ sth.txt
rr-@luna:~$ cat "$var"
test
rr-@luna:~$ var="file sth.txt"
rr-@luna:~$ cat "$var"
test

版本= GNU bash, version 4.3.33(1)-release (i686-pc-cygwin)

答案 2 :(得分:0)

试试这个,这就是Mac OS X终端处理此类案件的方式。

cat /path/to/file\ sth.txt

您可以对脚本执行相同的操作

sh script.sh /path/to/file\ sth.txt

答案 3 :(得分:0)

使用数组:

# Put all your filenames in an array
arr=("file sth.txt")  # Quotes necessary
arr+=("$1")           # Quotes necessary if $1 contains whitespaces
arr+=("foo.txt") 

# Expand each element of the array as a separate argument to cat
cat "${arr[@]}"       # Quotes necessary

如果您发现自己依赖于单词拆分(即,您在命令行上展开的变量被它们包含的空格拆分为多个参数这一事实),使用数组通常会更好。