免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3778 | 回复: 14
打印 上一主题 下一主题

echo "!" 报错? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-24 11:36 |只看该作者 |倒序浏览
我在Ubuntu server 8.10 上,无意输入了: echo "AAAAAA!"
结果报错:

-bash: !": event not found


谁能告诉我为什么?
多谢。

论坛徽章:
0
2 [报告]
发表于 2009-01-24 11:40 |只看该作者
!前加个\

论坛徽章:
0
3 [报告]
发表于 2009-01-24 11:42 |只看该作者
转义看看。

论坛徽章:
0
4 [报告]
发表于 2009-01-24 11:46 |只看该作者
谢谢,回答

我知道 通过把双引号,改为单引号也可以,转义也可以。

echo 'AAAAAA!'
echo "AAAAA\!"

都可以。

但是,为什么
echo "AAAA!"
会报错呢?


!在shell中有何特殊含义么?

论坛徽章:
0
5 [报告]
发表于 2009-01-24 11:56 |只看该作者
!ls
既显示ls,又显示了ls执行后的内容

论坛徽章:
0
6 [报告]
发表于 2009-01-24 12:04 |只看该作者
bash的这个!好难琢磨,好像是表示上一次执行的命令
  1. [root@host ~]# !ls 1
  2. ls 1
  3. ls: 1: 没有那个文件或目录
  4. [root@host ~]# !ls 2
  5. ls 1 2
  6. ls: 1: 没有那个文件或目录
  7. ls: 2: 没有那个文件或目录
  8. [root@host ~]# !ls 3
  9. ls 1 2 3
  10. ls: 1: 没有那个文件或目录
  11. ls: 2: 没有那个文件或目录
  12. ls: 3: 没有那个文件或目录
  13. [root@host ~]# !ls
  14. ls 1 2 3
  15. ls: 1: 没有那个文件或目录
  16. ls: 2: 没有那个文件或目录
  17. ls: 3: 没有那个文件或目录
复制代码

[ 本帖最后由 ywlscpl 于 2009-1-24 12:05 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-01-24 12:40 |只看该作者
对于bash,命令行中的!可能是这样的意思
!!表示上一条命令,!xx表示上一条同类命令(比如前面执行过ls 1,!ls就是ls 1)
而且还有个效果是不光输出命令结果,在第一行还输出命令替换后的实际执行命令
  1. [root@host tmp]# aaa
  2. -bash: aaa: command not found
  3. [root@host tmp]# !!
  4. aaa
  5. -bash: aaa: command not found
  6. [root@host tmp]# bbb
  7. -bash: bbb: command not found
  8. [root@host tmp]# !bbb
  9. bbb
  10. -bash: bbb: command not found
  11. [root@host tmp]# !bbb 1
  12. bbb 1
  13. -bash: bbb: command not found
  14. [root@host tmp]# !!bbb 1
  15. bbb 1bbb 1
  16. -bash: bbb: command not found
  17. [root@host tmp]# ls x
  18. ls: x: 没有那个文件或目录
  19. [root@host tmp]# !!
  20. ls x
  21. ls: x: 没有那个文件或目录
  22. [root@host tmp]# !ls y
  23. ls x y
  24. ls: x: 没有那个文件或目录
  25. ls: y: 没有那个文件或目录
  26. [root@host tmp]# !!ls z
  27. ls x yls z
  28. ls: x: 没有那个文件或目录
  29. ls: yls: 没有那个文件或目录
  30. ls: z: 没有那个文件或目录
复制代码


这样就能理解楼主的 echo "AAAAAA!"为什么报-bash: !": event not found
翻译过来就是"这样的同类命令找不到
如下,报的就是xxx"这样的同类命令没找到:
  1. [root@host tmp]# echo "xxxx!xxx"
  2. -bash: !xxx": event not found
  3. [root@host tmp]#
复制代码


像这样,就不会报错,因为前面有执行过一个同类ls命令。echo "xxx!ls在命令替换过后变成echo "xxxls zzz
  1. [root@host tmp]# ls zzz
  2. ls: zzz: 没有那个文件或目录
  3. [root@host tmp]# echo "xxx!ls
  4. echo "xxxls zzz
  5. >
复制代码

[ 本帖最后由 ywlscpl 于 2009-1-24 15:04 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-01-24 14:39 |只看该作者
我去看看!!!输出的是啥

论坛徽章:
0
9 [报告]
发表于 2009-01-24 14:50 |只看该作者

回复 #8 alextu 的帖子

!!!永远报错,但是!!!!就会解释为两个!!

论坛徽章:
0
10 [报告]
发表于 2009-01-24 15:01 |只看该作者
果然
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP