Linux expect中\n和\r之间的差异?

Linux expect中\n和\r之间的差异?,linux,bash,expect,Linux,Bash,Expect,在这个特定的脚本中,他们使用\n #!/usr/bin/expect set password [lindex $argv 0] spawn asadmin enable-secure-admin expect "admin" send "admin\n" expect "password" send "$password\n" expect eof exit 问题 \r也可以被使用吗?如果没有,区别是什么?\n是换行符、Ctrl-J或字符012\r是回车符、Ctrl-M或字符015 在交

在这个特定的脚本中,他们使用
\n

#!/usr/bin/expect

set password [lindex $argv 0]

spawn asadmin enable-secure-admin
expect "admin"
send "admin\n"
expect "password"
send "$password\n"
expect eof
exit
问题


\r
也可以被使用吗?如果没有,区别是什么?

\n
是换行符、Ctrl-J或字符012<代码>\r是回车符、Ctrl-M或字符015

在交互式unix上下文中,当您键入它们(或像预期的那样模拟键入它们)时,它们是可互换的。换行符是正式的换行符,但tty设备通常在输入时将回车转换为换行符。在您的键盘上,BKWA(带有箭头的大键,可能标有“回车”或“回车”)发送一个Ctrl-M,tty设备会将其转换为Ctrl-J。如果您的BKWA坏了,您可以实际键入Ctrl-M或Ctrl-J,它也可以正常工作

在输出上,它们是不可互换的。正如我所说的,换行符是正式的换行符,所以程序(和文本文件)将用换行符表示换行结束。将换行符输出到tty时,tty通常会将其转换为回车换行符对


当字符实际到达显示设备时,回车键将光标移动到行的开头,而换行符将光标向下移动一行。

为了补充Kenster的精彩回答,Wikipedia有一篇关于/EOL约定及其背后的历史的好文章。请注意,对于EOL,某些Internet协议更喜欢使用
\r\n
组合,尽管大多数软件将处理普通的
\n
,使用此类协议的库例程可能会自动将本地EOL转换为正确的序列。