美文网首页
【shell】文件名中有空格怎么办

【shell】文件名中有空格怎么办

作者: iamsharleen | 来源:发表于2018-09-18 23:10 被阅读0次

初接触unix,开始写shell,遇到一个很恼人的问题。
先看看需求:
创建一个文件夹,在里面新建一个文件

多简单是吧

再看看格式
/root/my dir/sub dir/test file.txt
(当然,这里只是模仿的,重点是无论文件夹名称、文件名称都是有空格的)

dir=/root/my dir/sub dir
file=${dir}/test file.txt

其实这里第一个就执行不了:-bash: dir/sub: No such file or directory,shell不认空格的。

dir="/root/my dir/sub dir"
file="${dir}/test file.txt"
echo $dir
# /root/my dir/sub dir
echo $file
# /root/my dir/sub dir/test file.txt

看起来很正常了,来创建看看

mkdir -p $dir

可以发现,并没有创建my dir和sub dir文件夹,反而多了my、dir这样的几个文件夹。可以发现,其实它相当于执行了

mkdir -p /root/my dir/sub dir

竟然双引号可以让空格失效,那我们来加上双引号

mkdir -p "$dir"

创建成功!

用同样的方法创建test file.txt

touch "${file}"

其实在使用上面的方法前,我已经尝试过各种语法,包括括号、单引号、双引号、反斜线,甚至交替使用(因为我之前没接触过shell语法,完全是用java语法来套的),碰壁碰出来的。

dir="/root/my dir/sub dir"
dir=/root/my\ dir/sub\ dir
dir='/root/my dir/sub dir'

以上三个是一样的,输入都是:/root/my dir/sub dir。
但是如果改一下格式,后面要根据时间创建一个文件夹,很显示要使用函数了。来看看

dir="/root/my dir/sub dir/`date +%Y%m%d`"
dir=/root/my\ dir/sub\ dir/`date +%Y%m%d`
dir='/root/my dir/sub dir/`date +%Y%m%d`'

最后一行输出的是:/root/my dir/sub dir/date +%Y%m%d

可以得出结论:

  • 单引号的作用就是把它里面的东西,完完整整地输出来
  • 双引号可以使部分符号、变量失效,可是某些特殊符号、变量依然生效

另外,

touch $dir/'test file.txt'
touch $dir/"test file.txt"
touch $dir/test\ file.txt

以上三个都是不成功的,需要全部包起来!

touch “$dir/test file.txt”

相关文章

网友评论

      本文标题:【shell】文件名中有空格怎么办

      本文链接:https://www.haomeiwen.com/subject/foqtgftx.html