if语句不适用于tcsh但在bash上工作正常

时间:2013-05-29 20:12:18

标签: unix tcsh

这在bash上运行正常,但我需要在tcsh中运行它。以下是我使用的代码:

if [ -e ~/test/file ]; then echo 'yes'; else echo | mail -s 'not done' abc@gmail.com ; fi

这个基本代码给出了一个错误if: Expression Syntax

我不知道错误意味着什么,也不确定为什么if语句不起作用。括号之前/之后我有空格。我尝试了if ( test -f ~/test/file )并得到了同样的错误。

我迷失了,因为我默认使用bash而且这个错误没有提供任何见解。我看到一些类似的案例,但没有关于检查文件是否存在。

2 个答案:

答案 0 :(得分:1)

请参阅tcsh手册页的“文件查询操作员”部分。

您所描述的tcsh sytnax是

if ( -e ~/test/file ) then
    echo 'yes'
else
    echo | mail -s 'not done' abc@gmail.com
endif

请注意,tcsh不擅长在一行上运行代码片段。

答案 1 :(得分:1)

您可以在一系列命令中使用test命令在一行上运行:

test -e ~/test/file && echo 'yes' || mail -s 'not done' abc@gmail.com

或者如果您对肯定的情况不感兴趣,可以使用简短的“if”格式

if ( ! -e ~/test/file ) mail -s 'not done' abc@gmail.com