一些 Linux 终端命令中的这些符号是什么意思?

一些 Linux 终端命令中的这些符号是什么意思?

在 AskUbuntu 上,我看到一些命令看起来相当复杂,里面有很多符号。为了更好地理解这些命令是如何构建的,我想知道这些符号代表什么。

例如:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

或者更复杂一点:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

我非常清楚,添加诸如-c、之类的参数--debug会对主命令产生一定的影响。这些参数的含义几乎在所有情况下都可以在页面中找到man,所以这不是我真正想要的。

请尝试在您的答案中定义这些符号的具体作用,而不是解释我给出的示例。可能看起来像这样:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

提前致谢

答案1

Bash 参考手册部分称为Shell 操作高级 Bash 脚本指南 第 3 章(特殊字符)

每当我需要学习有关 ubuntu/linux 中的 shell 脚本的新知识时,我都会参考这些内容。

我认为您会发现 ABS 第 3 章最容易理解。所有符号都显示在页面的最左侧,其下方紧接着有说明。

答案2

不幸的是,您必须转到手册页,因为“符号”可能具有不同的含义,具体取决于读取它们的命令。

例如,在您的第一个命令中,{} 和 \; 的含义取决于 find 命令 (man find)。sed 参数上的引号的含义取决于 sed 或 bash(因为它是一个带引号的参数,所以它可能是一个 shell 的东西)。~/ 肯定是一个 bash 模式扩展的东西。

对于第二个复杂的命令,它主要是回显内容,因此您可以在 bash 的手册页中找到有关它的大部分信息。

为了回答你对此的评论,重定向字符 > < | 用于将内容从文件传输到文件(大于号和小于号),并将命令的输出与另一个命令的输入连接起来(管道 |)。请参阅这里有关 I/O 重定向的精彩教程,这是 Unix shell 和工具集的一个非常强大的设计功能。

答案3

.c第一个在目录中搜索以 结尾的文件~/,然后exec使用 utes sed(流线型编辑器)进行搜索,seds会将cybernetnews其更改为cybernet

第二个我不明白...执行时显示的结果为空。

答案4

由于您粘贴的是复杂的命令,因此很难告诉您符号的完整含义。

尤其是回声。

请参阅 man echo 中的 -e ,它启用了转义符,因此稍后 \e 就是转义符。

其余符号大部分都是字符串操作。

假设你有一个变量 i,它包含一个字符串“foo”

i=foo;echo $i
foo

但是如果变量 $i 也是字符串的一部分,情况就会变得更加复杂

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

现在你也可以操作字符串,只打印一部分

在你的情况下

${i#*=} = 打印 $i,删除 * 和 = 之间的最短匹配,但 * 本身是通配符..

echo ${i#o}
foo

echo ${i#*o}
o

http://tldp.org/LDP/abs/html/string-manipulation.html

接下来我们进入子 shell(x...)

Bash 将处理子 shell 中的命令并返回命令的输出。

x = (i 的子字符串) ;继续

现在我们有一个测试,[“${!x}”]

看 :http://tldp.org/LDP/abs/html/testconstructs.html

至此我就不能再告诉你更多了。

在 bash 中,${!x} 将是一个空字符串。&& == 逻辑且 || 是逻辑或

测试 {空字符串} AND 回显空字符串或回显 x

您需要提供更多语法,但看起来这个回声正在将其输出传输到某处。

再次[ ]是一个测试,我们在一开始就逃脱了一个[。

所以我只能解释回声所起的作用。

在终端中输入 echo 命令时没有输出的原因是它是一段代码,默认情况下 x 和 i 都没有定义,所以所有输出都是空的。

相关内容