Linux之特殊的环境变量IFS以及如何删除带有空格的目录

Posted 峰哥ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之特殊的环境变量IFS以及如何删除带有空格的目录相关的知识,希望对你有一定的参考价值。

1、IFS是什么?

Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell用户字段分隔符的一系列字符。默认情况下,bash shell会将空格当做字段分隔符。我这里的系统是Centos7系统。

但是往往我们不能仅仅以空格符来作为字段分隔符,有时候我们需要以换行符设置为分隔符。

演示如下:

现在我创建了四个目录,其中一个目录带有空格。现在我想把一下子他们统统都删除掉。

[[email protected]chaofeng test]# ls
chao  chao feng  chen  feng
[[email protected]-chaofeng test]# ll
total 16
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chao
drwxr-xr-x 2 root root 4096 Feb 14 10:52 chao feng
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chen
drwxr-xr-x 2 root root 4096 Feb 14 11:57 feng

如何直接删除的话,会出现下面的情况:

[[email protected] test]# find . -type d
.
./chao feng
./chen
./feng
./chao
[[email protected]-chaofeng test]# for dir in `find . -type d`; do echo ${dir} ;done
.
./chao
feng
./chen
./feng
./chao

上面红色背景的本来是一个目录,结果这里却显示成了两个目录,所以使用rm删除的话肯定是删除不掉的。(我这里使用echo来做演示而已,echo显示正确,那么rm也能顺利删除带有空格的目录)

此时我们就需要使用IFS来解决这个问题了。

[[email protected] test]# IFS=$
 && for dir in `find . -type d`; do echo ${dir} ;done
.
./chao feng
./chen
./feng
./chao

这个时候我们发现带有空格的目录可以完整显示了。这是正确的。那么现在我们就可以删除了。

[[email protected]chaofeng test]# ll
total 20
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chao
drwxr-xr-x 2 root root 4096 Feb 14 10:52 chao feng
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chen
drwxr-xr-x 2 root root 4096 Feb 14 11:57 feng
[[email protected]-chaofeng test]# IFS=$
 && for dir in `find . -type d`; do rm -rf ${dir} ;done
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
[[email protected]-chaofeng test]# ls

此时rm报错可以忽略。现在看来我们已经成功的结果了这个问题。

以上是关于Linux之特殊的环境变量IFS以及如何删除带有空格的目录的主要内容,如果未能解决你的问题,请参考以下文章

Linux拓展之字段分隔符IFS

IFS变量对加双引号和不加双引号变量的区别对待

如何彻底删除hive以及配置好的环境变量

x1fn.ifs命令的用途

Linux命令之查看环境变量env

IFS=$'\n' 的确切含义是啥?