![csh if语句交互使用](https://linux22.com/image/139932/csh%20if%E8%AF%AD%E5%8F%A5%E4%BA%A4%E4%BA%92%E4%BD%BF%E7%94%A8.png)
要么我的 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
相当于FALSE
shell 级别的值。
另请记住,这csh
有点可疑,因为它if
不是csh
关键字,而是内置命令。
在 中csh
,if
内置函数调用一个单独的解析器来读取直到语句被完全读取。
请注意,与 FreeBSD 和 Linux 上不同,csh
Solaris 上的二进制文件并不相同,tcsh
而是不同的。但即使tcsh
在 Solaris 上也是如此。
一般来说,csh是不一致的,参见eghttp://www.faqs.org/faqs/unix-faq/shell/csh-whynot/