7

bash,我曾经#输入评论。即使在交互式会话中。

bash-3.2$ #
bash-3.2$ #
bash-3.2$ #
bash-3.2$ 

csh为此吐出错误。如何在交互式csh会话中输入一些评论?换句话说,我正在寻找一种在csh.

root@freebsd9:~ # #
#: Command not found.
root@freebsd9:~ # # 3e
#: Command not found.
root@freebsd9:~ # #
#: Command not found.
root@freebsd9:~ # 
4

4 回答 4

9

交互式 csh 或 tcsh 不做评论。该#角色仅在脚本中引入注释。(这与 sh 及其衍生物的行为不同,例如 bash。)引用csh手册页(来自 Solaris 9,剩余的系统之一,其中csh不仅仅是指向 的符号链接tcsh):

当 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

必填链接:http ://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot

于 2013-10-14T18:16:37.707 回答
2

作为参考,我想记下我当前的解决方法。它正在使用echo.

#!/bin/tcsh
echo "This is comment line."
echo "But still, beware... Because `expression` is still being evaluated.

这是我能找到的最好方法。

于 2013-10-18T18:26:43.817 回答
1

要在 tcsh 或 csh 中使用 # 进行交互式注释,这似乎在大多数情况下都有效:

alias '#' 'echo \!* >> /dev/null'

它可以由用户以交互方式运行,也可以根据需要放置在.tcshrc.cshrc配置文件中。

(别名显然可以根据您的需要以不同的方式命名;正常的限制适用。)


注意:正如上面提到的 Keith Thompson,如果您的评论包含重定向字符,例如>or ,这仍然会出错>>,但使用这种方式似乎不会实际创建不需要的重定向文件。将注释括在单引号 ( ') 中仍然是一种解决方法。

于 2017-12-03T19:19:03.950 回答
-2

检查您的脚本是否具有 UNIX EOL 格式。Windows EOL 格式有一些问题。

于 2016-04-27T14:23:31.073 回答