在bash
中,我使用#
输入评论。即使是在互动环节上也是如此。
bash-3.2$ #
bash-3.2$ #
bash-3.2$ #
bash-3.2$
csh
吐出错误。如何在交互式csh
会话中输入一些评论?换句话说,我正在寻找一种在csh
中100%确定评论的方法。
root@freebsd9:~ # #
#: Command not found.
root@freebsd9:~ # # 3e
#: Command not found.
root@freebsd9:~ # #
#: Command not found.
root@freebsd9:~ #
答案 0 :(得分:8)
交互式csh或tcsh不做评论。 #
字符仅在脚本中引入注释。 (这与sh及其派生词的行为不同,例如bash。)引用csh
手册页(来自Solaris 9,csh
不仅仅是tcsh
的符号链接的其余系统之一1}}):
当shell的输入不是终端时,字符# 引入一条持续到输入行末尾的注释。 它的特殊含义在前面带有\或括号时被抑制 匹配报价。
我认为,重点是交互式命令不需要评论。
如果您使用的是tcsh ,则可以使用内置的:
命令执行类似操作,该命令不执行任何操作:
% : 'This is not a comment, but it acts like one.'
(其中%
表示shell提示符,:
是命令)。引用这个论点是个好主意;否则,虽然命令没有执行,但它可能有一些效果:
% : This will create the file "oops.txt" > oops.txt
请注意,由于:
是一个命令,因此必须后跟一个空格。
:
命令最初是在Bourne shell的早期版本中引入的,或者甚至可能在此之前引入。
但是,/bin/csh
命令的:
版本不允许任何参数,因此无法替代注释:
csh% : 'This will not work.'
:: Too many arguments
csh%
(当我最初发布这个答案时,我没有意识到。我必须用tcsh测试它而不是真正的csh。)
由于:
在纯csh中不起作用,下一个最佳解决方案可能是使用echo
并重定向输出:
csh% echo 'This is not a comment, but it acts like one.' > /dev/null
答案 1 :(得分:2)
作为参考,我想注意我目前的解决方法。它正在使用echo
。
#!/bin/tcsh
echo "This is comment line."
echo "But still, beware... Because `expression` is still being evaluated.
这是我能找到的最佳方式。
答案 2 :(得分:0)
要在tcsh或csh中使用#作为交互式评论,这似乎适用于大多数情况:
alias '#' 'echo \!* >> /dev/null'
它可以由用户以交互方式运行,也可以根据需要放在 .tcshrc 或 .cshrc 配置文件中。
(别名显然可以按照您的意愿命名;正常限制适用。)
注意:正如上面提到的Keith Thompson所说,如果你的评论包含>
或>>
等重定向字符,这仍然会出错,但是这种方式似乎并没有真正创建不需要的重定向文件。单引号('
)周围的注释仍然是一种解决方法。
答案 3 :(得分:-2)
检查您的脚本是否具有UNIX EOL格式。 Windows EOL格式存在一些问题。