如何在tcsh Shell中检查变量是否为空?

时间:2014-03-25 16:06:05

标签: csh tcsh

如果我必须在bash shell中检查变量是否为空,我可以使用以下脚本进行检查:

if [ -z "$1" ] 
then
    echo "variable is empty"
else 
    echo "variable contains $1"
fi

但我需要将其转换为tcsh shell。

3 个答案:

答案 0 :(得分:33)

有关使用tcsh / csh的标准警告适用,但这里是翻译:

if ( "$1" == "" ) then      # parentheses not strictly needed in this simple case
    echo "variable is empty"
else 
    echo "variable contains $1"
endif

但请注意,如果您在上面使用了任意变量名而不是$1,那么语句会在该变量尚未定义的情况下中断(而< strong> $1始终定义,即使未设置)。


要计划可能无法定义变量(例如$var 的情况),它会变得棘手:

if (! $?var) then       
  echo "variable is undefined"
else
  if ("$var" == "")  then
      echo "variable is empty"
  else 
      echo "variable contains $var"
  endif
endif

嵌套if是必需的,以避免破坏脚本,因为tcsh显然没有短路(else if分支的条件将获得即使输入if分支也会进行评估;类似地,&&||表达式的两边似乎始终评估 - 这至少适用于使用未定义的变量)。

答案 1 :(得分:2)

您可以尝试此操作(found here):

set name
if ( ${%name} == 0 ) then
        echo " Variable name has 0 characters as value."
endif

请注意,发布此内容的人具有以下签名:

  

标准建议:避免使用csh系列进行脚本编写。

注意:如果name是环境变量,则会中断。

setenv name foobar ; set name ; echo '+++'$name'+++' ; unset name ; echo '==='$name'==='

++++++
===foobar===

答案 2 :(得分:0)

编辑:见下面的评论。

if ( $?1 ) then
    echo "variable is empty"
else 
    echo "variable contains $1"
endif