关于\n转义用法的几个问题请教(不明白的可以来共同讨论。)

重复贴和参考价值不大的帖子,版主维护
回复
leanas
帖子: 13
注册时间: 2011-05-28 14:03
送出感谢: 0
接收感谢: 0

关于\n转义用法的几个问题请教(不明白的可以来共同讨论。)

#1

帖子 leanas » 2011-06-16 19:35

以下是我在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。
对于为什么会出现这种情况,我百思不得其解。怎么解释都感觉行不通。所以才来这里请教各位大才,望不吝赐教。先在这里谢谢了。希望有清楚明白这个问题的人给我详细的解释。或者给我一个链接都行。想不通憋的难受。
头像
nmsfan
帖子: 18958
注册时间: 2009-10-16 22:46
来自: finland
送出感谢: 16 次
接收感谢: 36 次

Re: 关于\n转义用法的几个问题请教(不明白的可以来共同讨论。)

#2

帖子 nmsfan » 2011-06-16 19:44

不懂 :-?
期待解答
>>>>推Ubuntu 桌面培训~~<<<<
>>>>想加入/了解gimp汉化吗,点我吧~<<<<
——————————————————————
不推荐wubi,也不推荐你给别人推荐wubi…………
随心而为的感觉真好……
强推mayhem!!
强推ensiferum
frankvista
帖子: 177
注册时间: 2010-06-16 20:55
送出感谢: 0
接收感谢: 1 次

Re: 关于\n转义用法的几个问题请教(不明白的可以来共同讨论。)

#3

帖子 frankvista » 2011-06-16 19:55

PS1是每个shell自己定义转义序列的, bash的转义序列支持\n, 你换个就不行了, 比如

代码: 全选

sh
PS1='abc\ndef$ '
这样的实验同样可以在zsh做, 也是不支持\n转义的.
后面的, cat不能转义, 变量用\表示换行也是bash规定的.
leanas
帖子: 13
注册时间: 2011-05-28 14:03
送出感谢: 0
接收感谢: 0

Re: 关于\n转义用法的几个问题请教(不明白的可以来共同讨论。)

#4

帖子 leanas » 2011-06-17 11:25

用echo -e ...就能转义了。难道这些转义字符都是每个程序自已定义的吗?
头像
自由建客
论坛版主
帖子: 13427
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: freebuilder@yeah.net
送出感谢: 12 次
接收感谢: 112 次
联系:

Re: 关于\n转义用法的几个问题请教(不明白的可以来共同讨论。)

#5

帖子 自由建客 » 2011-06-30 6:33

leanas, 是自己定义的没错,但通常都遵循 C 语言的习惯。
回复

回到 “归档贴”