以下是我在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。
对于为什么会出现这种情况,我百思不得其解。怎么解释都感觉行不通。所以才来这里请教各位大才,望不吝赐教。先在这里谢谢了。希望有清楚明白这个问题的人给我详细的解释。或者给我一个链接都行。想不通憋的难受。
age 于 2011-06-17 12:17:37发表:
转义字符是由bash定义的, 事实上这可能是从c语言延续下来的
但是否将之视为转义字符还是普通字符, 则由程序自己决定
leanas 于 2011-06-17 11:19:12发表:
果然啊,转义字符都是每个程序命令自已定义的吗?
yanyongkg 于 2011-06-16 22:17:33发表:
[code][root@localhost ~]# abc="xy\nz"
[root@localhost ~]# echo $abc
xy\nz
[root@localhost ~]# echo -e $abc
xy
z[/code]
age 于 2011-06-16 22:15:20发表:
[i=s] 本帖最后由 age 于 2011-6-16 22:16 编辑 [/i]
用echo -e就能识别特殊字符了
\回车, 本身就不是输入多行的. 一般当一行内容太多时, 可以用这个, 在下一行继续输入. 但系统将其视为一行