用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

还是笔记本内置摄像头的问题

以下是我在shell里边输入的一段命令,用于检测\n的用法。有几个不理解的地方。
1 /home/lyn -->$ PS1="abc\ndef$ "
2 abc
3 def$ echo $PS1
4 abc\ndef$
5 abc
6 def$ cat >newfile
7 abc\ndef
8 ^C
9 abc
10 def$ cat newfile
11 abc\ndef
12 abc
13 def$ ab=abc\
14 > def
15 abc
16 def$ echo $ab
17 abcdef
18 abc
19 def$

第一句,我的理解是双引号把字串abc\ndef$置于了变量PS1之中。所以接下来的shell提示在读取PS1变量的时候会读取这个新值。但由于字串中\n转义成了换行符,所以实际提示变成了:
2 abc
3 def$
但我不明白为什么echo $PS1显示的时候没有转义却又把\n给显示了出来。接着我又实验,如同6~11行。在newfile文件中我写入了abc\ndef字串。然后又用cat newfile显示。结果如同echo $PS1一样。也是把\n原原本本的读了出来,并没有带来转义效果。我又接着实验,如同13~17行。
13 def$ ab=abc\(此时按了ENTER键)
发现此时的\好像是把ENTER键转义了,因为这一行并没有结束,它让我继续输入,如同14行所示。我又输入def后按ENTER。命令正常结束。可是显示的ab变量的时候又显示了一个连续的字串abcdef。
对于为什么会出现这种情况,我百思不得其解。怎么解释都感觉行不通。所以才来这里请教各位大才,望不吝赐教。先在这里谢谢了。希望有清楚明白这个问题的人给我详细的解释。或者给我一个链接都行。想不通憋的难受。
昵称: leanas  时间: 2011-06-16 19:35:00
不懂 :-?
期待解答
昵称: nmsfan  时间: 2011-06-16 19:44:00
PS1是每个shell自己定义转义序列的, bash的转义序列支持\n, 你换个就不行了, 比如
代码:
sh
PS1='abc\ndef$ '

这样的实验同样可以在zsh做, 也是不支持\n转义的.
后面的, cat不能转义, 变量用\表示换行也是bash规定的.
昵称: frankvista  时间: 2011-06-16 19:55:00
发表评论
昵称:
内容:
验证: