《快乐的Linux命令行》学习记录——第七章从shell眼中看世界
发布日期:2021-05-08 18:02:38 浏览次数:13 分类:精选文章

本文共 2751 字,大约阅读时间需要 9 分钟。

1. echo——显示一行文本

echo 是 shell 的一个内部命令,用于在标准输出中打印文本参数。它能够接受多个参数,并将这些参数依次输出到屏幕上。

例如:

[me@linuxbox ~]$ echo this is a test 输出结果:
this is a test

2. (字符)展开

echo 命令接收的任意参数都会被展开显示。通配符可以帮助我们匹配文件名中的特定字符。

例如:

[me@linuxbox ~]$ echo * 输出结果: Desktop Documents ls-output.txt Music Pictures Public Templates Videos

如果要匹配以大写字母开头的文件,可以使用 [[:upper:]]*

[me@linuxbox ~]$ echo [[:upper:]]* 输出结果: Desktop Documents Music Pictures Public Templates Videos

查看主目录之外的目录也非常方便:

[me@linuxbox ~]$ echo /usr/*/share/usr/kerberos/share /usr/local/share 输出结果: /usr/local/share

隐藏文件路径名的展开需要特殊处理:

echo .* 可能会包含隐藏文件,但也会显示当前工作目录和父目录的路径,使用 ls -d . | less 更为准确。

3. 路径名展开

echo 命令可以展开路径名中的通配符,方便文件管理。

例如:

[me@linuxbox ~]$ echo D* 输出结果: Desktop Documents

使用通配符展开带特定后缀的文件:

[me@linuxbox ~]$ echo *s 输出结果: Documents Pictures Templates Videos

隐藏文件可以通过 ls -A 查看:

[me@linuxbox ~]$ ls -A

4. 按照波浪线展开:echo ~foo

波浪线字符 (~) 在 shell 中有特殊含义。当它出现在单词开头时,会展开为指定用户的主目录。如果没有指定用户名,默认为当前用户的主目录。

例如:

[me@linuxbox ~]$ echo ~foo 输出结果: /home/foo

查看当前用户的主目录:

[me@linuxbox ~]$ echo ~ 输出结果: /home/me

5. 算术表达式展开:$((expression))

shell 提供了一个内置计算器,可以使用算术表达式展开。表达式由数字和算术操作符组成,且只支持整数运算。

例如:

[me@linuxbox ~]$ echo $((2 + 2)) 输出结果: 4

复杂的算术表达式也可以使用括号嵌套:

[me@linuxbox ~]$ echo $(((5**2) * 3)) 输出结果: 75

6. 花括号展开:echo Front-{A,B,C}-Back

花括号可以用来创建带有变量替换的多行文本输出。

例如:

[me@linuxbox ~]$ echo Front-{A,B,C}-Back 输出结果: Front-A-Back Front-B-Back Front-C-Back

花括号展开也可以嵌套:

[me@linuxbox ~]$ echo a{A{1,2},B{3,4}}b 输出结果: aA1b aA2b aB3b aB4b

7. 参数展开:echo $USER

参数展开允许我们引用 shell 变量,方便处理系统信息和脚本化操作。

例如:

[me@linuxbox ~]$ echo $USER 输出结果: me

查看所有环境变量:

[me@linuxbox ~]$ printenv | less

如果变量名错误,参数展开仍会输出空字符串:

[me@linuxbox ~]$ echo S U E R 输出结果: S U E R

8. 命令替换:echo $(ls)

命令替换允许我们将命令输出作为展开模式使用,非常方便文件管理和脚本化操作。

例如:

[me@linuxbox ~]$ echo $(ls) 输出结果: Desktop Documents ls-output.txt Music Pictures Public Templates Videos

结合管道线使用:

[me@linuxbox ~]$ file $(ls /usr/bin/* | grep zip) 输出结果: /usr/bin/bunzip2: symbolic link to `bzip2’

9. 引用

引用机制允许我们选择性地禁止参数展开,控制输出格式。

例如:

[me@linuxbox ~]$ echo this is a test 输出结果: this is a test

引用可以用于避免参数展开中的空格问题:

[me@linuxbox ~]$ echo The total is $100.00 输出结果: The total is 00.00

10. 双引号:引用的第1种类型

双引号可以用来引用包含特殊字符的文本,避免单词分割机制解析空格。

例如:

[me@linuxbox ~]$ ls -l "two words.txt" 输出结果: -rw-rw-r-- 1 me me 18 2008-02-20 13:03 two words.txt

双引号中的参数展开和命令替换仍然有效:

[me@linuxbox ~]$ echo "$USER $((2+2)) $(cal)" 输出结果: me 4 February 2008 Su Mo Tu We Th Fr Sa …

11. 单引号:引用的第2种类型-禁止所有的展开

单引号禁止所有的参数展开,适用于需要完全控制输出格式的场景。

例如:

[me@linuxbox ~]$ echo 'text ~/.txt {a,b} $(echo foo) $((2+2)) $USER' 输出结果: text ~/.txt {a,b} foo 4 me

12. 转义字符:反斜杠\

反斜杠用于转义特殊字符,常用于双引号中以避免参数展开。

例如:

[me@linuxbox ~]$ echo “The balance for user $USER is: $5.00” 输出结果: The balance for user me is: $5.00

在文件名中使用反斜杠可以解决特殊字符问题:

[me@linuxbox ~]$ mv bad&filename good_filename
上一篇:关于Go实战开发的一些资料
下一篇:C++后台开发学习过程记录

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月27日 19时19分28秒