我尝试使用名为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
文件包含变量,并且包含多个文件名。对于没有空格的文件名,它可以工作。有人可以给我一些建议吗?
答案 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
如果您发现自己依赖于单词拆分(即,您在命令行上展开的变量被它们包含的空格拆分为多个参数这一事实),使用数组通常会更好。