csh if语句交互使用

csh if语句交互使用

要么我的 Solaris 10 csh 实现有问题如果声明或者我没有得到正确的东西(当然,至少在我的情况下第二个很可能)但是当我这样做时:

% if 1 then <enter>
%

=> 什么也没发生

当我这样做时:

% if 0 then
?

=> 这也是我在第一种情况下所期望的。否则我无法在没有得到的情况下完成我的陈述的构建

if: improper then

我真的可以恳请您不要以“不要使用 csh”开始您的赞赏答案吗?如果您真的愿意,您可以以此结束它。在过去的几年里,到目前为止,csh 在交互目的方面为我提供了很好的服务,并且对于我所做的这个小脚本,我使用 Bourne shell 或 bash。

谢谢

答案1

首先,了解endif如果没有要关闭的挂起 if(s),则(在 csh 中)是无操作(无操作)。执行它没有任何效果。

% endif
%

因此,如果明确(因为值为 1,这对 csh 来说是正确的,与 c 语言中完全相同)if 后面的命令将被执行,则无需延迟它们的执行,并且它们是“允许的” " 立即生效:

% if (1) then
% echo yes
yes
% echo no
no
% endif

然而,对于假值(0),将避免执行直到endif执行a。

% if (0) then
? echo yes
? echo no
? endif
%

这就是 csh 的工作原理。

注意:我不if: improper then同意if 0 then。也许错误在其他地方。

编辑

嗯……可能需要澄清一些。如果我写(在<enter>添加之前添加空格只是为了清楚起见,请忽略它们):

% if 0 then                            <enter> !!!!!!!!!!!!!
? echo Hello there
? echo Yes
? endif
%

我没有收到任何错误。

如果我写:

% if 0 then echo Hello there                       <enter> !!!!!!!!!!!!!
% if: Improper then.

我明白你的错误。

答案2

该值1相当于FALSEshell 级别的值。

另请记住,这csh有点可疑,因为它if不是csh关键字,而是内置命令。

在 中cshif内置函数调用一个单独的解析器来读取直到语句被完全读取。

请注意,与 FreeBSD 和 Linux 上不同,cshSolaris 上的二进制文件并不相同,tcsh而是不同的。但即使tcsh在 Solaris 上也是如此。

一般来说,csh是不一致的,参见eghttp://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

相关内容