-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path18.html
More file actions
278 lines (278 loc) · 19.8 KB
/
Copy path18.html
File metadata and controls
278 lines (278 loc) · 19.8 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="CodeClub - Shell echo 命令" />
<meta name="author" content="Jackson" />
<title>Shell echo 命令 - CodeClub</title>
<link rel="icon" type="image/x-icon" href="../../img/logo.png" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
crossorigin="anonymous"
referrerpolicy="no-referrer"
/>
<link rel="stylesheet" href="../../css/main.css" />
<link rel="stylesheet" href="../../css/dark-mode.css" />
<link rel="stylesheet" href="../../css/mobile-optimizations.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/12.0.0/marked.min.js"></script>
<style>
.tutorial-page {
max-width: 1200px;
margin: 70px auto 40px;
padding: 0 20px;
display: flex;
gap: 20px;
}
.tutorial-sidebar {
width: 240px;
flex-shrink: 0;
position: sticky;
top: 70px;
max-height: calc(100vh - 90px);
overflow-y: auto;
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-sidebar h3 {
font-size: 15px;
margin: 0 0 12px;
color: var(--text-primary, #1a1a2e);
padding-bottom: 8px;
border-bottom: 2px solid var(--primary, #3b82f6);
}
.tutorial-sidebar a {
display: block;
padding: 5px 8px;
color: var(--text-secondary, #666);
text-decoration: none;
font-size: 13px;
border-radius: 4px;
line-height: 1.4;
}
.tutorial-sidebar a:hover {
background: var(--primary, #3b82f6);
color: #fff;
}
.tutorial-sidebar a.active {
background: var(--primary, #3b82f6);
color: #fff;
font-weight: 600;
}
.tutorial-main {
flex: 1;
min-width: 0;
}
.tutorial-article {
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 32px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-article h1 {
font-size: 26px;
margin-bottom: 16px;
color: var(--text-primary, #1a1a2e);
border-bottom: 2px solid var(--primary, #3b82f6);
padding-bottom: 12px;
}
.markdown-body {
font-size: 15px;
line-height: 1.8;
color: var(--text-secondary, #333);
}
.markdown-body h1 {
font-size: 24px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 8px;
}
.markdown-body h2 {
font-size: 20px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 6px;
}
.markdown-body h3 {
font-size: 17px;
}
.markdown-body pre {
background: #1e1e2e;
color: #cdd6f4;
padding: 16px;
border-radius: 8px;
overflow-x: auto;
}
.markdown-body code {
font-family: 'Fira Code', 'Cascadia Code', monospace;
font-size: 14px;
}
.markdown-body p code {
background: #f1f5f9;
padding: 2px 6px;
border-radius: 4px;
color: #e83e8c;
}
.markdown-body blockquote {
border-left: 4px solid var(--primary, #3b82f6);
padding: 12px 20px;
margin: 16px 0;
background: #f8fafc;
border-radius: 0 8px 8px 0;
}
.markdown-body img {
max-width: 100%;
border-radius: 8px;
}
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 16px 0;
}
.markdown-body table th,
.markdown-body table td {
border: 1px solid var(--border, #e5e7eb);
padding: 8px 12px;
text-align: left;
}
.markdown-body table th {
background: var(--bg-primary, #f8fafc);
font-weight: 600;
}
.markdown-body table tr:nth-child(2n) {
background: var(--bg-primary, #f8fafc);
}
.markdown-body ul,
.markdown-body ol {
padding-left: 24px;
margin: 12px 0;
}
.markdown-body li {
margin: 4px 0;
}
.markdown-body hr {
border: none;
border-top: 1px solid var(--border, #e5e7eb);
margin: 24px 0;
}
.markdown-body a {
color: var(--primary, #3b82f6);
text-decoration: none;
}
.markdown-body a:hover {
text-decoration: underline;
}
.page-navigation {
display: flex;
justify-content: space-between;
margin-top: 24px;
padding-top: 16px;
border-top: 1px solid var(--border, #e5e7eb);
}
.page-nav-link {
color: var(--primary, #3b82f6);
text-decoration: none;
font-weight: 500;
font-size: 14px;
}
.page-nav-link:hover {
text-decoration: underline;
}
.source-link {
margin-top: 16px;
font-size: 13px;
color: var(--text-secondary, #999);
}
.source-link a {
color: var(--primary, #3b82f6);
}
@media (max-width: 768px) {
.tutorial-page {
flex-direction: column;
}
.tutorial-sidebar {
width: 100%;
position: static;
max-height: 200px;
}
}
</style>
</head>
<body>
<nav class="navbar">
<div class="navbar-container">
<a class="navbar-brand" href="../../index.html">
<img src="../../img/logo.png" alt="CodeClub" width="32" height="32" />
<span>CodeClub</span>
</a>
<button class="mobile-menu-toggle" aria-label="切换导航菜单"><span></span><span></span><span></span></button>
<ul class="navbar-nav">
<li><a class="nav-link" href="../../index.html">首页</a></li>
<li><a class="nav-link" href="../../nav.html">网址导航</a></li>
<li><a class="nav-link" href="../../blog/">博客</a></li>
<li><a class="nav-link" href="../../wiki/index.html" target="_blank">WiKi</a></li>
<li><a class="nav-link active" href="../index.html">教程</a></li>
<li><a class="nav-link" href="../../book.html">图书</a></li>
<li><a class="nav-link" href="../../contact.html">联系我</a></li>
<li><a class="nav-link" href="../../about.html">关于我</a></li>
</ul>
</div>
</nav>
<div class="tutorial-page">
<div class="tutorial-sidebar">
<h3>📖 Linux</h3>
<a href="0.html">Linux</a>
<a href="1.html">Linux 简介</a>
<a href="2.html">Linux 安装</a>
<a href="3.html">Linux 云服务器</a>
<a href="4.html">WSL 安装 Linux</a>
<a href="5.html">Linux 系统启动过程</a>
<a href="6.html">Linux 系统目录结构</a>
<a href="7.html">Linux 忘记密码解决方法</a>
<a href="8.html">Linux 远程登录</a>
<a href="9.html">Linux 文件基本属性</a>
<a href="10.html">Linux 文件与目录管理</a>
<a href="11.html">Linux 用户和用户组管理</a>
<a href="12.html">Linux 磁盘管理</a>
<a href="13.html">Linux vi/vim</a>
<a href="14.html">linux yum 命令</a>
<a href="15.html">Linux apt 命令</a>
<a href="16.html">Shell 教程</a>
<a href="17.html">Shell 变量</a>
<a href="18.html" class="active">Shell echo 命令</a>
<a href="19.html">Shell test 命令</a>
<a href="20.html">Shell 流程控制</a>
<a href="21.html">Shell 函数</a>
<a href="22.html">Linux 命令大全</a>
<a href="23.html">Nginx 安装配置</a>
<a href="24.html">MySQL 安装配置</a>
</div>
<div class="tutorial-main">
<div class="tutorial-article">
<div class="markdown-body" id="md-content"></div>
<div class="page-navigation">
<a href="17.html" class="page-nav-link">← Shell 变量</a>
<a href="19.html" class="page-nav-link">Shell test 命令 →</a>
</div>
<div class="source-link">原文来源:<a href="https://www.runoob.com" target="_blank">菜鸟教程</a></div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer-content"><p>© 2024 CodeClub. All rights reserved.</p></div>
</footer>
<script src="../../js/dark-mode.js"></script>
<script src="../../js/mobile-menu.js"></script>
<script>
const md = `## Shell echo 命令\n\`echo\` 是一个内置的 Shell 命令,用于在标准输出(通常是终端)显示一行文本或变量的值。\nShell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。\n\n\n\n**命令格式:**\n\n\n\n\`\`\`\n\necho [选项] [字符串]\n\n\`\`\`\n\n\n### 为什么需要 echo?\n\n\n\n\n- **信息反馈**:向用户显示脚本执行状态或结果\n\n- **调试工具**:输出变量值或执行位置,帮助调试脚本\n\n- **交互界面**:创建简单的用户交互界面\n\n- **文件生成**:快速生成配置文件或脚本\n\n\n\n\n---\n\n基本用法\n\n\n### 1. 简单文本输出\n\n最基本的用法是直接输出字符串:\n\n\n\n\n\n## 实例\n\n\necho "Hello, World!"\n\n\n\n\n**执行结果**:\n\n\n\n\`\`\`\nHello, World!\n\n\`\`\`\n\n\n### 2. 输出变量\n\n\`echo\` 可以显示变量的值:\n\n\n\n\n\n## 实例\n\n\nname="Linux User"\n\necho "Welcome, $name!"\n\n\n\n\n**执行结果**:\n\n\n\n\`\`\`\nWelcome, Linux User!\n\n\`\`\`\n\n\n### 3. 不带引号的输出\n\n引号不是必须的,但建议使用以避免意外:\n\n\n\n\n\n## 实例\n\n\necho This is a test\n\n\n\n\n**执行结果**:\n\n\n\n\`\`\`\nThis is a test\n\n\`\`\`\n\n\n---\n\n\n## 常用选项\n\n\n### -n 选项:不换行输出\n\n默认情况下,\`echo\` 会在输出后添加换行符。使用 \`-n\` 可以禁止这种行为:\n\n\n\n\n\n## 实例\n\n\necho -n "Loading..."\n\necho " Done!"\n\n\n\n\n**执行结果**:\n\n\n\n\`\`\`\nLoading... Done!\n\n\`\`\`\n\n\n### -e 选项:启用转义字符解释\n\n启用对反斜杠转义的解释:\n\n\n\n\n\n## 实例\n\n\necho -e "First line\\nSecond line"\n\n\n\n\n**执行结果**:\n\n\n\n\`\`\`\nFirst line\nSecond line\n\n\`\`\`\n\n\n### 常用转义序列\n\n\n\n\n转义序列\n说明\n\n\n\n\`\\n\`\n换行\n\n\n\`\\t\`\n水平制表符\n\n\n\`\\v\`\n垂直制表符\n\n\n\`\\b\`\n退格\n\n\n\`\\r\`\n回车\n\n\n\`\\\\\`\n反斜杠字符本身\n\n\n\n---\n\n\n## 高级用法\n\n\n### 1. 输出到文件\n\n使用重定向将输出保存到文件:\n\n\n\n\n\n## 实例\n\n\necho "This will be saved to file" > output.txt\n\n\n\n\n追加内容到文件:\n\n\n\n\n\n## 实例\n\n\necho "Additional line" >> output.txt\n\n\n\n\n\n### 2. 彩色输出\n\n使用 ANSI 转义码实现彩色文本:\n\n\n\n\n\n## 实例\n\n\necho -e "\\033[31mRed Text\\033[0m"\n\necho -e "\\033[42;31mGreen Background with Red Text\\033[0m"\n\n\n\n\n**颜色代码参考**:\n\n\n\n\n\n- 前景色:30(黑)、31(红)、32(绿)、33(黄)、34(蓝)、35(紫)、36(青)、37(白)\n\n- 背景色:40-47 对应上述颜色\n\n- \`\\033[0m\` 重置所有属性\n\n\n\n### 3. 输出命令执行结果\n\n使用命令替换输出命令结果:\n\n\n\n\n\n## 实例\n\n\necho "Today is $(date)"\n\n\n\n\n**执行结果**:\n\n\n\n\`\`\`\nToday is Wed Jul 12 14:30:22 CST 2023\n\n\`\`\`\n\n\n---\n\n\n## 实际应用示例\n\n\n### 1. 创建简单菜单\n\n\n\n\n## 实例\n\n\necho -e "\\n\\033[1mSystem Menu\\033[0m"\n\necho "1. Check disk space"\n\necho "2. List running processes"\n\necho "3. Show system info"\n\necho -n "Please enter your choice [1-3]: "\n\n\n\n\n\n### 2. 进度条模拟\n\n\n\n\n## 实例\n\n\necho -n "Progress: ["\n\nfor i in {1..20}; do\n\n echo -n "#"\n\n sleep 0.1\n\ndone\n\necho "] Done!"\n\n\n\n\n\n### 3. 生成配置文件\n\n\n\n\n## 实例\n\n\ncat EOF | sudo tee /etc/myapp.conf\n\n# Generated by script on $(date)\n\n[Database]\n\nhost = localhost\n\nport = 3306\n\nuser = appuser\n\npassword = secret123\n\nEOF\n\n\n\n\n\n---\n\n\n## 注意事项\n\n**1、引号的重要性**:\n\n\n\n\n\n## 实例\n\n\nvar="Hello World"\n\necho $var # 可能有问题,如果变量包含空格\n\necho "$var" # 正确方式\n\n\n\n\n**2、不同Shell的实现差异**:\n\n\n\n\n\n- Bash 内置 \`echo\` 支持 \`-e\` 选项\n\n- 某些系统上的 \`/bin/echo\` 可能不支持所有选项\n\n- 可移植脚本建议使用 \`printf\` 替代复杂 \`echo\`\n\n\n**3、特殊字符处理**:\n\n\n\n\n\n## 实例\n\n\necho "Cost: \\$100" # 输出 $ 符号\n\necho "Path: /usr/local/bin" # 斜杠不需要转义\n\n\n\n\n\n\n---\n\n\n## 总结要点\n\n\n\n\n关键点\n说明\n\n\n\n基本语法\n\`echo [选项] [字符串]\`\n\n\n常用选项\n\`-n\` 不换行,\`-e\` 启用转义\n\n\n变量输出\n使用 \`$变量名\`,建议用双引号包裹\n\n\n彩色输出\n使用 ANSI 转义码 \`\\033[XXm\`\n\n\n输出重定向\n\`>\` 覆盖文件,\`>>\` 追加到文件\n\n\n多行输出\n使用 \`\\n\` 换行或 Here Document\n\n\n可移植性建议\n复杂输出考虑使用 \`printf\`\n\n\n \n \n \n \n \n\n \n \n [ Shell test 命令](http://www.runoob.com/linux/linux-shell-test.html)\n \n\n \n \n \n \n \n\n\n\n\n\n \n## \n \n \n \n 3 篇笔记\n 写笔记\n\n\n\n\n\n \n\n #0 leocll\n\n leo***@qq.com\n\n 92echo输出的字符串总结\n\n===================================================================\n\n 能否引用变量 | 能否引用转移符 | 能否引用文本格式符(如:换行符、制表符)\n\n单引号 | 否 | 否 | 否\n\n双引号 | 能 | 能 | 能\n\n无引号 | 能 | 能 | 否 \n\n===================================================================\n\n[leocll](https://www.runoob.comjavascript:;) leocll\n\n leo***@qq.com\n\n9年前 (2017-09-28)\n#0 muzhiming\n\n muz***ing_zbq@163.com\n\n 121read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。\n\n\n\n测试文件 test.sh 代码如下:\n\n\n\n\`\`\`\nread firstStr secondStr\necho "第一个参数:$firstStr; 第二个参数:$secondStr"\n\`\`\`\n\n执行测试:\n\n\n\n\`\`\`\n\n$ sh test.sh \n一 二 三 四\n第一个参数:一; 第二个参数:二 三 四\n\n\`\`\`\n\n\n实例, 文件 test.sh:\n\n\n\n\n\n\`\`\`\nread -p "请输入一段文字:" -n 6 -t 5 -s password\necho -e "\\npassword is $password"\n\`\`\`\n\n\n\n参数说明:\n\n- \n**-p** 输入提示文字\n\n- \n**-n** 输入字符长度限制(达到6位,自动结束)\n\n- \n**-t** 输入限时 \n\n- \n**-s** 隐藏输入内容\n\n\n\n\n\`\`\`\n$ sh test.sh \n请输入一段文字:\npassword is asdfgh\n\`\`\`\n[muzhiming](https://www.runoob.comjavascript:;) muzhiming\n\n muz***ing_zbq@163.com\n\n8年前 (2018-02-02)\n#0 yy\n\n 169***3930@qq.com\n\n 132**>** 重定向输出到某个位置,替换原有文件的所有内容。\n\n\n**>>** 重定向追加到某个位置,在原有文件的末尾添加内容。\n\n\n**** 重定向错误输出。\n\n\n**2>>** 重定向错误追加输出到文件末尾。\n\n\n**&>** 混合输出错误的和正确的都输出。\n\n[yy](https://www.runoob.comjavascript:;) yy\n\n 169***3930@qq.com\n\n7年前 (2019-08-06)\n \n\n \n \n\n \n \n \n### 点我分享笔记\n\n \n \n \n \n \n \n [取消](https://www.runoob.comjavascript:;)\n\n\n \n \n \n \n \n \n\n\n 分享笔记\n \n \n \n \n \n \n\n 昵称昵称 (必填)\n 邮箱邮箱 (必填)\n 引用地址引用地址\n \n\n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n 在线实例\n\n\n ·[HTML 实例](https://www.runoob.com/html/html-examples.html)\n\n\n ·[CSS 实例](https://www.runoob.com/css/css-examples.html)\n\n\n ·[JavaScript 实例](https://www.runoob.com/js/js-examples.html)\n\n\n ·[Ajax 实例](https://www.runoob.com/ajx/ajax-examples.html)\n\n\n ·[jQuery 实例](https://www.runoob.com/jquery/jquery-examples.html)\n\n\n ·[XML 实例](https://www.runoob.com/xml/xml-examples.html)\n\n\n ·[Java 实例](https://www.runoob.com/java/java-examples.html)\n\n\n\n\n\n 字符集&工具\n\n\n · [HTML 字符集设置](https://www.runoob.com/charsets/html-charsets.html)\n\n\n · [HTML ASCII 字符集](https://www.runoob.com/tags/html-ascii.html)\n\n\n · [JS 混淆/加密](https://www.jyshare.com/front-end/6939/)\n\n\n · [PNG/JPEG 图片压缩](https://www.jyshare.com/front-end/6232/)\n\n\n · [HTML 拾色器](https://www.runoob.com/tags/html-colorpicker.html)\n\n\n · [JSON 格式化工具](https://www.jyshare.com/front-end/53)\n\n\n · [随机数生成器](https://www.jyshare.com/front-end/6680/)\n\n\n\n\n 最新更新\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-custom-tools.html)\n\n\n ·\n [\n OpenCode Skills ](http://www.runoob.com/opencode/opencode-skills.html)\n\n\n ·\n [\n OpenCode MCP 服... ](http://www.runoob.com/opencode/opencode-mcp.html)\n\n\n ·\n [\n OpenCode LSP 服... ](http://www.runoob.com/opencode/opencode-lsp.html)\n\n\n ·\n [\n OpenCode 权限配置 ](http://www.runoob.com/opencode/opencode-permissions.html)\n\n\n ·\n [\n OpenCode 格式化... ](http://www.runoob.com/opencode/opencode-formatter.html)\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-commands.html)\n\n\n\n\n 站点信息\n\n\n ·\n [意见反馈](https://www.runoob.commailto:admin@runoob.com)\n\n\n ·\n [免责声明](https://www.runoob.com/disclaimer)\n\n\n ·\n [关于我们](https://www.runoob.com/aboutus)\n\n\n ·\n [文章归档](https://www.runoob.com/archives)\n\n\n\n\n\n\n\n **关注微信**\n\n\n\n \n\n\n\n\n\n\n Copyright © 2013-2026 **[菜鸟教程](https://www.runoob.com//www.runoob.com/)** \n **[runoob.com](https://www.runoob.com//www.runoob.com/)** All Rights Reserved. 备案号:[闽ICP备15012807号-1](https://beian.miit.gov.cn/)\n\n\n\n [ ](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n\n\n\n#### 微信关注\n\n `;
document.getElementById('md-content').innerHTML = marked.parse(md);
</script>
</body>
</html>