Aru*_*gal 0 unix linux bash command comments
在 bash GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)或任何稳定版本中,您可以使用#或:进行评论
这两个和有用性有什么区别?
我注意到#注释使整行成为注释,而:作用域/效果仅在它到达第一个\n或;字符(在给定行中)之前。
[gigauser@someserver ~]$ # this is a # comment; echo this will not print
[gigauser@someserver ~]$ : this is a : comment; echo this will print
this will print
Run Code Online (Sandbox Code Playgroud)
在下面的代码中,为什么最后 2 条评论没有按预期工作,然后将它们视为评论(尽管::如果它出现在: ?
[gigauser@someserver ~]$ #
[gigauser@someserver ~]$ ##
[gigauser@someserver ~]$ ####
[gigauser@someserver ~]$ ####
[gigauser@someserver ~]$ : : : : : : : : : :
[gigauser@someserver ~]$ #
[gigauser@someserver ~]$ # # #
[gigauser@someserver ~]$ ####
[gigauser@someserver ~]$
[gigauser@someserver ~]$ :
[gigauser@someserver ~]$ : :
[gigauser@someserver ~]$ : : : : : : : : : : : : ::::::::
[gigauser@someserver ~]$ : : :::::
[gigauser@someserver ~]$
[gigauser@someserver ~]$
[gigauser@someserver ~]$ ::
-bash: ::: command not found
[gigauser@someserver ~]$ :::::
-bash: :::::: command not found
[gigauser@someserver ~]$
Run Code Online (Sandbox Code Playgroud)
:根本不是评论,它是一个什么都不做的命令。最重要的区别在于,由于它是一个命令,因此它之后的任何 shell 语法都将被解释和执行。例如:
: Check whether x > 1
Run Code Online (Sandbox Code Playgroud)
此处该> 1部分将被解释为输出重定向,因此它将创建一个名为“1”的文件并将(空)输出重定向到该文件。如果是这样,x < 1它会尝试打开“1”进行输入并且(可能)失败。
: Check permissions on the user's home directory
Run Code Online (Sandbox Code Playgroud)
这里'将被解释为开始一个单引号字符串(这将是 的参数:),并且可能会对脚本的其余部分的解析方式造成严重破坏。
: Test for completion (again)
Run Code Online (Sandbox Code Playgroud)
生产 -bash: syntax error near unexpected token `('
:如果您希望执行参数扩展(因为它们的副作用),但不想对结果做任何事情,则该命令有时很有用。
: ${VAR:=defaultvalue}
Run Code Online (Sandbox Code Playgroud)
在这里,如果$VAR尚未设置为非空白,则:=修饰符会将其设置为“默认值”。这基本上是一个简写
if [ -z "$VAR" ]; then
VAR=defaultvalue
fi
Run Code Online (Sandbox Code Playgroud)
编辑:
正如 AKS在评论中的链接所指出的那样,一个效果:是您可以使用它进行块评论以及带有引用分隔符的 here-document。这与#.
: Check whether x > 1
Run Code Online (Sandbox Code Playgroud)
常规注释必须以#.
(注意:与链接所说的相反,您可以在 here-doc 分隔符上使用单引号或双引号,即<'COMMENT'或<"COMMENT"。如果在分隔符上没有某种引用,shell 将尝试解析和扩展任何$或它在文档中找到的反引号表达式,这会再次引起麻烦。)