这些符号在某些Linux终端命令中是什么意思?[关闭]


12

在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 ...

提前致谢


我认为这取决于命令-c -D可能意味着在命令1的东西,在命令2.完全地不同的事
乌里·埃雷拉

嘿,您更改了第一个命令?编辑在哪里:X
Rinzwind

我确实更改了第一条评论,因为它保留了非信息性的内容。我想展示尽可能相关的示例。为此,我在相应的部分进行了编辑评论。感谢-c -D的东西,我明白了。我更新了问题。
Exeleration-G 2011年

Answers:


14

请参阅《 Bash参考手册》中名为Shell-Operation的部分和《高级Bash脚本指南》 第3章(特殊字符)

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

我认为您会发现ABS第3章最容易实现您的目的。所有符号都显示在页面的最左侧,并在其下方提供了说明。


高级Bash脚本指南-第3章很棒。谢谢。
Exeleration-G 2011年

高级bash脚本编制指南的第3章中的列表不完整,部分错误。Advanced Bash脚本指南不是学习bash的好资源。请参阅mywiki.wooledge.org/BashGuidemywiki.wooledge.org/BashFAQ
盖尔哈2012年

@geirha我发现ABS很有帮助,但是对于特定命令中的符号,我希望改为查看手册页,而且您的链接也很棒-带书签。谢谢。
SaultDon 2012年

7

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

例如,在您的第一个命令中,{}和\的含义;取决于find命令(man find)。sed的引号含义取决于sed或bash(因为它是带引号的参数,因此可能是外壳程序)。〜/绝对是bash模式扩展的东西。

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

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


好吧,那又如何>呢?这也是我经常看到的标志,我认为它的意思是“复制”之类的东西。这也取决于命令吗?
Exeleration-G 2011年


3

第一个搜索.c从sed 插入的目录~/execute sed(流线编辑器)中结束的文件scybernetnews并将其更改为cybernet

第二个告诉我...执行时显示空结果。


这很有可能,因为它是从另一个问题中提取的。没有上下文,它可能什么也不做。
Exeleration-G 2011年


2

粘贴复杂命令时,很难告诉您符号的全部含义。

特别是回声。

请参阅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#* =} = print $ i,去除*和=之间的最短匹配,但是*本身是一个通配符..

echo ${i#o}
foo

echo ${i#*o}
o

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

接下来我们击中一个子壳(x ...)

Bash将在子外壳中处理命令并返回命令的输出。

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

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

参见:http : //tldp.org/LDP/abs/html/testconstructs.html

在这里,我无法再告诉您了。

在bash中,$ {!x}将是一个空字符串。&& ==逻辑和|| 是合乎逻辑的

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

您可能需要提供更多的语法,但似乎此回显正在管道化其输出。

同样,[]是测试,我们从一开始就逃脱了[]。

所以我只能解释回声在做什么。

在终端中输入echo命令时没有输出的原因是它是代码的伪装,默认情况下x或i都未定义,因此所有输出均为空。


1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.