[问题]在看<高级Bash脚本编程指南>遇到的一例子 实际和期望输出有很大的差异

sh/bash/dash/ksh/zsh等Shell脚本
回复
chai21cn
帖子: 8
注册时间: 2008-01-07 0:55

[问题]在看<高级Bash脚本编程指南>遇到的一例子 实际和期望输出有很大的差异

#1

帖子 chai21cn » 2008-01-17 17:10

例子代码如下

代码: 全选

#!/bin/bash
# Embedding Ctl-H in a string.

a="^H^H"                  # 两个 Ctl-H's (backspaces).
echo "abcdef"             # abcdef
echo -n "abcdef$a "       # abcd f
#  Space at end  ^              ^ 两次退格.
echo -n "abcdef$a"        # abcdef
#  结尾没有空格                   没有 backspace 的效果了(why?).
                           # 结果并不像期望的那样.
echo; echo
实际结果:

代码: 全选

abcdef
abcdef^H^H abcdef^H^H
期望结果:

代码: 全选

abcdef
abcd fabcdef
这个是什么原因呀,谁能来指点一二
chai21cn
帖子: 8
注册时间: 2008-01-07 0:55

#2

帖子 chai21cn » 2008-01-17 17:13

代码: 全选

#!/bin/bash
# Embedding Ctl-H in a string.

a="^H^H"                  # Two Ctl-H's (backspaces).
echo "abcdef"             # abcdef
echo -n "abcdef$a "       # abcd f
#  Space at end  ^              ^ Backspaces twice.
echo -n "abcdef$a"        # abcdef
#  No space at end                Doesn't backspace (why?).
                           # Results may not be quite as expected.
echo; echo
这是原版的
头像
patrickhe
帖子: 681
注册时间: 2005-07-21 19:13
来自: Peking, China
联系:

#3

帖子 patrickhe » 2008-01-17 19:00

^H 指的是退格字符,而不是一个字符串“^H”。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#4

帖子 BigSnake.NET » 2008-01-17 19:16

^H 用 Ctrl-v Ctrl-h 的方式输入
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

#5

帖子 iblicf » 2008-01-17 20:12

时间的流逝速度与年龄成正比
呵呵呵呵。。。。。。
chai21cn
帖子: 8
注册时间: 2008-01-07 0:55

#6

帖子 chai21cn » 2008-01-17 20:19

好了,已经找到原因了

我是用gvim写的这个脚本,按Ctrl-H,它会自动退一格,所以我就用的^H的字符串
现在经你们提醒重新用cat命令来写的脚本,按Ctrl-H,它不会退一格了而且显示^H

在gvim中开了语法高亮的话能看出Ctrl-H生成的^H和字符串^H的颜色是不同的
头像
patrickhe
帖子: 681
注册时间: 2005-07-21 19:13
来自: Peking, China
联系:

#7

帖子 patrickhe » 2008-01-18 11:13

chai21cn 写了:好了,已经找到原因了

我是用gvim写的这个脚本,按Ctrl-H,它会自动退一格,所以我就用的^H的字符串
现在经你们提醒重新用cat命令来写的脚本,按Ctrl-H,它不会退一格了而且显示^H

在gvim中开了语法高亮的话能看出Ctrl-H生成的^H和字符串^H的颜色是不同的
在 vi 中,进入 insert mode,ctrl+v ctrl+h 也可以输入 backspace 字符。
回复