要么我的 Solaris 10 csh 实现if语句有问题,要么我没有得到正确的东西(当然,至少在我的情况下,第二个很可能)但是当我这样做时:
% if 1 then <enter>
%
=> 什么都没发生
当我这样做时:
% if 0 then
?
=> 这也是我在第一种情况下所期望的。Couse 否则我没有办法完成我的陈述而没有得到
if: improper then
我真的可以请您不要以“不要使用 csh”作为您赞赏的答案的开头......如果您真的喜欢它,您可以用它来结束它。Couse 在过去几年到现在为止,csh 为我的交互目的提供了很好的服务,对于我所做的这个小脚本,我使用 Bourne shell 或 bash。
谢谢
首先,了解(在 csh
endif
中)如果没有待处理的 if(s) 要关闭,则为无操作(无操作)。执行它没有任何效果。因此,如果很清楚(因为值为 1,这对 csh 表示 true,与 c 语言中的完全一样) if 之后的命令将被执行,则无需延迟它们的执行,并且它们是“允许的” " 立即生效:
但是,对于假值 (0),在执行 a 之前会避免
endif
执行。这就是 csh 的工作原理。
注意:我不明白
if: improper then
.if 0 then
也许错误在其他地方。编辑
嗯......一些澄清可能是为了。如果我写(为了清楚起见,添加前的空格,请
<enter>
忽略它们):我没有错误。
如果我写:
我明白你的错误。
该值
1
相当于FALSE
外壳级别。另外请记住,
csh
这有点可疑,因为if
它不是csh
关键字,而是内置命令。在
csh
中,if
内置函数调用一个单独的解析器,该解析器一直读取到语句被完全读取。请注意,与 FreeBSD 和 Linux
csh
上的不同,Solaris 上的二进制文件并不相同,tcsh
而是不同的二进制文件。但即使tcsh
在 Solaris 上也是如此。一般来说,csh 是不一致的,参见例如http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/