首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >csh if语句交互使用

csh if语句交互使用
EN

Unix & Linux用户
提问于 2018-09-11 13:56:06
回答 2查看 5.2K关注 0票数 -1

要么我的if语句的Solaris 10 csh实现有什么可疑之处,要么我没有得到正确的东西(当然,至少在我的情况下,第二个很有可能),但是当我这样做时:

代码语言:javascript
复制
% if 1 then <enter>
%

=>什么都没发生

当我这么做的时候

代码语言:javascript
复制
% if 0 then
?

=>,这也是我在第一种情况下所期望的。否则,我将无法完成我的语句的构造

代码语言:javascript
复制
if: improper then

我能否请你不要以“不要使用csh”开始你的感激的回答.你可以用它来结束它,如果你真的想的话。在过去的几年里,csh为我的交互目的提供了很好的服务,对于我所做的这个小脚本,我使用了Bourne或bash。

谢谢

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-09-11 19:18:59

首先,要理解(在csh中) endif是一个无操作(无操作),如果没有未决如果(S)关闭。执行它没有任何效果。

代码语言:javascript
复制
% endif
%

因此,如果很明显(因为值为1,对csh意味着对csh是正确的,与c语言完全一样),则不需要延迟它们的执行,并且“允许”它们立即生效:

代码语言:javascript
复制
% if (1) then
% echo yes
yes
% echo no
no
% endif

但是,对于false值(0),在执行endif之前,将避免执行。

代码语言:javascript
复制
% if (0) then
? echo yes
? echo no
? endif
%

这就是csh的工作原理。

注意:我不使用if: improper thenif 0 then。也许是别的地方出错了。

编辑

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

代码语言:javascript
复制
% if 0 then                            <enter> !!!!!!!!!!!!!
? echo Hello there
? echo Yes
? endif
%

我没有错误。

如果我写:

代码语言:javascript
复制
% if 0 then echo Hello there                       <enter> !!!!!!!!!!!!!
% if: Improper then.

我明白你的错误。

票数 0
EN

Unix & Linux用户

发布于 2018-09-11 14:19:30

在shell级别上,1值等效于FALSE

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

csh中,if内置调用一个单独的解析器,该解析器读取语句直到语句被完全读取。

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

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

票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/468284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档