某些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页中找到它们的含义,所以这并不是我想要的。

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

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

提前致谢

请参阅“Bash参考手册”一节中的Shell-Operation和Advanced Bash-Scripting Guide 第3章(特殊字符) 。

我指的是那些我需要在ubuntu / linux中学习shell脚本的新东西。

我认为你会发现ABS第3章最容易为你的目的导航。 所有符号都显示在页面的最左侧,并在其下方有描述。

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

例如,在你的第一个命令中,{}和\的含义; 依赖于find命令(man find)。 sed参数的引号的含义取决于sed或bash(因为它是一个引用参数,它可能是一个shell事物)。 〜/绝对是bash模式扩展的东西。

对于第二个复杂的命令,它主要是回显的东西,所以你可以在bash的手册页中找到关于它的大部分信息。

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

第一个从目录中搜索以.c结尾的文件~/exec sed (流线编辑器),其中sed s搜索cybernetnews并将其更改为cybernet

第二个逃避我……执行时显示空结果。

我发现学习终端命令的最佳资源是LinuxCommand ,它详细描述了最常用的命令。

当您粘贴复杂命令时,很难告诉您符号的完整含义。

特别是回声。

对于-e,请参阅man echo,它可以实现转义,因此迟到\ e是一种逃避。

大多数其他符号是字符串操作。

所以想象你有一个变量,我包含一个字符串“foo”

 i=foo;echo $i foo 

但是如果你的变量$ i也是字符串的一部分,那就变得更复杂了

 echo $ibar # Note: no output echo ${i}bar # we have output foobar 

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

在你的情况下

$ {i#* =} = print $ 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}将是一个空字符串。 && ==逻辑和|| 是合乎逻辑的

test {empty string} AND echo空字符串或echo x

你需要提供更多的语法,但看起来这个echo在某个地方输出它的输出。

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

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

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

有关特定语言中符号的问题,您可能需要尝试使用SymbolHound。 您可以在网络上搜索Google找不到的字符。