本文共 2202 字,大约阅读时间需要 7 分钟。
在 shell 中,命令替换是一种非常强大的功能,它可以让你嵌套使用命令,并将结果代入另一个命令中。()
是命令替换的基础-syntax,但它有一些限制,比如无法处理命令嵌套。$()
则弥补了这个缺陷。
~
:家目录~
是 Unix/Linux 系统中表示当前用户主目录的符号。它可以直接作为命令的参数使用,比如 cd ~/Documents
会跳转到用户的文档目录。
!
:历史命令调用!
用于调用bash历史上的命令。!
后面直接跟命令会匹配最近一次执行过的相同命令。比如 ! ls
会重新执行最后一次 ls
命令。!
的灵活性在数据处理和脚本编写中非常有用。
#
:注释#
是bash脚本中注释的符号。它后面跟的内容不会被解释为命令,适合用来는注释代码。#
本身不会被拆分为多个命令,但有时候会影响脚本的执行,所以要谨慎使用。
@
:特殊符号在bash 中,@
并没有特殊含义,仅仅是一个普通符号。它可以用来在文本中随意使用,但有时候会被误解为某些版本控制工具的命令(如git中 @
用于特定分支)。
%
:取模与后台进程%
和 %jobs
结合使用可以查看当前后台进程。%
也可以用来取模运算,比如 % 3 % 2
会计算5除以3的余数(类似于 C 的 5 % 3
)。这一功能在编写脚本时特别有用。
^
:取反与替换^
类似于 !
和 ^
,它可以用来取反或替换字符串。比如 ^/foo/
可以从路径中去掉前缀 /foo/
。在字符串处理中,^
非常实用。
&
:后台执行&
用于指定命令后台执行。运行完当前命令后,继续执行shell会话。&
还可以用于并行执行命令,但需要注意进程组管理。使用 &
可以提高效率,但要小心潜在的资源竞争。
*
:通配符与数学运算*
是一个通用字符匹配符,可以匹配任意长度的字符串,包括零个字符。它还可以用于数学运算,比如 2 * 3
会计算6。在脚本中,可以通过 *
来自动化处理文件和目录的名称。
()
:子进程执行(命令)
可以在当前进程中启动子进程,执行指定的命令。()
是非常有用的工具,比如在批量处理或多任务处理中使用,就能避免命令被中断。
-
:减号-
在shell中有多个含义:作为选项减号,表示排除某些选项;作为区间表示从末尾开始数到前一个符号;cd -
可以返回上一级目录。
_
:无特殊含义在bash 中,_
既不是变量符号,也不是特殊符号。它可以 作为占位符使用,或者自定义为变量名。你可以使用 echo ${_VAR}
来查看它的值。
+
:加号+
在shell中表示加法运算符。同样,也可以用来表示命令的组合,例如 echo a + b
会输出 "a + b"。在编写数学脚本时非常实用。
=
:赋值=
用于赋值,常用于变量赋值、shedctl 参数赋值等。比如 x=10
会把变量 x
设为 10。
|
:管道与逻辑或|
用于数据管道,可以将一个命令的输出作为另一个命令的输入。同样,||
用于逻辑或,前一个命令失败则执行后一个命令。在 if
结构中常常用到 |
和 ||
。
\
:转义\
用于转义特殊字符,使其不被 shell 解释为命令或符号。例如,\n
会转义为换行符,\>
转义为 >
。
{}
:命令列表{ ...; }
可以用来组合多个命令进行执行。前提是必须以空格分隔每个命令,并且括号内的命令必须以 {
开头并以 }
结尾。这样的结构可以让脚本中更加清晰地组织命令。
[...]
:字符通配[...]
是一种强大的字符匹配工具,类似于 glob。它可以用于匹配符合具体模式的文件或字符串。在脚本中常用于自动处理文件扩展名或路径。
:backslash
:空命令:
前缀可以作为值返回或用于控制流。比如,:
本身作为真值返回,常用于编写一条不做任何事情的命令。
;
:多命令执行;
用于在命令行上执行多个命令。命令会顺序执行,无论前一个命令是否成功都会执行下一个。如果希望命令按顺序执行且不管结果,这非常有用。
除了上述符号,还有许多其他符号可以用来表示不同的含义。理解这些符号的用途对于 shell 脚本编写非常重要。比如,*
, ?
, [ab]
([a-z]
),甚至 [[:alnum:]]
都可以用于文本处理,充分发挥shell的强大功能。
在shell中,可以使用 ${变量名}
来引用变量。变量名的字符可以包含数字、字母,并可以从前到后形成访问方式(方法:以 $()
来展开)。
在shell中,引用变量通常使用 ${}
,而转义符号 \
帮助你以纯字符的形式处理特殊字符。复杂的转义和变量引用在文本处理脚本中尤为重要。
在Unix/Linux 系统中,文件和目录可以是硬引用(强引用)或软引用(符号链接)。硬引用的文件不会随原文件变化,而软引用的文件会随原文件变化。这一点在数据备份和包含/排除策略中非常重要。
转义符号是shell 中的基础,了解并正确使用它们可以避免很多常见错误。同时,shell 提供了许多选项来规范化和强制转义字符,这对于代码的可读性和安全性至关重要。
加上命令替换 /jar啥的,都能用这种方式嵌套啊!
最后,我觉得自己对 shell 命令的理解还不够深入,得多多看资料和练习啦!
转载地址:http://mzzfk.baihongyu.com/