プログラミングの話

Echoの挙動

事の発端

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

以上の本に”\007”って標準出力すると文字コード由来でベルが鳴ると書いてあった。

書いてあるなら試すしか無い。

普段から利用しているiTermを開いて

1
echo "\007"

ベルが鳴る。

1
echo "\008"

8と出力

1
echo "\009"

9と出力

変な気がする。

問題点

ここに沿って考えると、BSとか、HTとかが表現されるはず。

少なくとも、普通に8とか9とかは違う気がする。

検証

以上のようなスクリプトを作成し走らせた。

結果は両方共以下のとおり。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103








8
9











8
9








8
9








8
9

!
"
#
$
%
&
'
8
9
(
)
*
+
,
-
.
/
8
9
0
1
2
3
4
5
6
7
8
9
8
9
:
;
<
=
>
?
8
9
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

途中でアルファベットとか出てきていいと思うのに、なんか違う気がする。

結論

echo コマンドの使い方の問題だった。

echoコマンド(引数で指定した内容を標準出力に出力する)

こんなことで日立にお世話になるとは思っていなかったけれど。

要するに、echoコマンドの使い方的には8進数か16進数を期待しているので、gistに上げたプログラムは自分の期待通りにはなりません。

自分が期待していた動きをするスクリプトは以下。実行結果は割愛

あと

1
echo "\007"

でベルがなるのは

1
2
3
4
5
6
7
8
9
注※1

    指定したASCIIコード文字が1桁または2桁の場合,前に0を付けて3桁で指定しても,同じ意味として解釈されます。例えば,次の3つの指定は同じ意味として解釈され,アラート文字(ベル)が3回出力されます。

    echo -e "\07"

    echo -e "\007"

    echo -e "\0007"

ということらしい。