linux命令行通配符,linux命令行学习(17):echo命令与通配符扩展

820c5e3dd881

echo是个常用命令,它的作用是在屏幕上显示其操作对象。例如:

echo hello world!

会在屏幕上显示hello world

但如果在字符串中写上通配符*或?,会怎么样呢?

一般来说,它会扩展,不会显示通配符,而是显示扩展后的内容。就是说,其显示的,一般不是我们写在命令里的字符串。但特殊情况下,也可能是我们写的包含通配符的字符串,也就是说,没有扩展。

这是什么原因呢?

什么情况下扩展,什么情况下不扩展?扩展后显示的内容是什么呢?

先说扩展后显示的内容是什么?

输入命令:

echo *

就很容易看出显示的内容。这个命令将显示当前目录中的文件名,如同ls命令一样,两个命令显示的内容完全一样。

也就是说,加入通配符,会显示文件名而不是命令中的那个字符串。

从这里也可以知道什么情况下不扩展:如果没有文件匹配,则仍然显示命令中的字符串。

例如,命令echo *在当前目录下没有文件时,会显示*。

由于/bin下总有文件,所以,命令

echo /bin/*

会显示出/bin下的所有文件名。

扩展的规则:如果有文件名匹配,就扩展为文件名;否则按字符串原样显示。

在linux中,文件名第一个字符是圆点的,是隐藏文件,一般不会显示。在ls命令中,需要加-a才能显示出来。如果用通配符,使用echo命令能不能显示呢?

echo .*

是可以的,但是多了两个.和..。在linux中,一个点指当前目录,两个点指当前目录的上级目录,它们两个不是文件,是文件夹。所以需要记住这一点,除了它们之外,就是隐藏文件。如果除了这两个之外,没有其它的,那指定目录就没有隐藏文件。

也可以用通配符将这两个目录排除:

echo .[!.]*

这个时候,如果有隐藏文件,会显示隐藏文件名;没有的话,就显示这个字符串。

echo用于通配符扩展的话,要显示指定目录的文件名,是将路径写在字符串中。例如:

echo /root/.*

会显示root目录中所有隐藏文件名(包含路径,也包含/root/.和/root/..)。

echo /root/.[!.]*

会显示root中所有隐藏文件名,没有/root/.和/root/..。

总结:在有通配符的情况下,echo会显示分区中所有匹配文件名,就是要扩展。如果没有匹配文件,则显示原字符串(包含通配符的字符串),就是不扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值