要么我的if语句的Solaris 10 csh实现有什么可疑之处,要么我没有得到正确的东西(当然,至少在我的情况下,第二个很有可能),但是当我这样做时:
% if 1 then <enter>
%=>什么都没发生
当我这么做的时候
% if 0 then
?=>,这也是我在第一种情况下所期望的。否则,我将无法完成我的语句的构造
if: improper then我能否请你不要以“不要使用csh”开始你的感激的回答.你可以用它来结束它,如果你真的想的话。在过去的几年里,csh为我的交互目的提供了很好的服务,对于我所做的这个小脚本,我使用了Bourne或bash。
谢谢
发布于 2018-09-11 19:18:59
首先,要理解(在csh中) endif是一个无操作(无操作),如果没有未决如果(S)关闭。执行它没有任何效果。
% endif
%因此,如果很明显(因为值为1,对csh意味着对csh是正确的,与c语言完全一样),则不需要延迟它们的执行,并且“允许”它们立即生效:
% if (1) then
% echo yes
yes
% echo no
no
% endif但是,对于false值(0),在执行endif之前,将避免执行。
% 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.我明白你的错误。
发布于 2018-09-11 14:19:30
在shell级别上,1值等效于FALSE。
另外,请记住,csh有点可疑,因为if不是csh关键字,而是内置命令。
在csh中,if内置调用一个单独的解析器,该解析器读取语句直到语句被完全读取。
请注意,与FreeBSD和Linux不同的是,Solaris上的csh与tcsh不同,而是不同的二进制文件。但是,即使是tcsh在Solaris上也是如此。
一般来说,csh是不一致的,参见http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/。
https://unix.stackexchange.com/questions/468284
复制相似问题