分页: 1 / 1

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

发表于 : 2008-01-17 17:10
chai21cn
例子代码如下

代码: 全选

#!/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
这个是什么原因呀,谁能来指点一二

发表于 : 2008-01-17 17:13
chai21cn

代码: 全选

#!/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
这是原版的

发表于 : 2008-01-17 19:00
patrickhe
^H 指的是退格字符,而不是一个字符串“^H”。

发表于 : 2008-01-17 19:16
BigSnake.NET
^H 用 Ctrl-v Ctrl-h 的方式输入

发表于 : 2008-01-17 20:12
iblicf
时间的流逝速度与年龄成正比
呵呵呵呵。。。。。。

发表于 : 2008-01-17 20:19
chai21cn
好了,已经找到原因了

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

在gvim中开了语法高亮的话能看出Ctrl-H生成的^H和字符串^H的颜色是不同的

发表于 : 2008-01-18 11:13
patrickhe
chai21cn 写了:好了,已经找到原因了

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

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