某些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找不到的字符。