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

Posted

技术标签:

【中文标题】如何在 tcsh Shell 中检查变量是不是为空?【英文标题】:How can I check if a variable is empty or not in tcsh Shell?如何在 tcsh Shell 中检查变量是否为空? 【发布时间】:2014-05-03 14:54:42 【问题描述】:

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

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

但我需要将它转换成 tcsh shell。

【问题讨论】:

Are you sure you should convert it to tcsh? Tcsh 不适合编程,但是试试这个:if ("x$1" == "x"). 这不是问题的答案。问题是 TCSH。 【参考方案1】:

关于使用tcsh/csh 的标准警告适用(不要将其用于脚本,因为它的inherent limitations),但这里是翻译:

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

但请注意,如果您要使用任意变量名而不是上面的 $1,则如果尚未定义该变量,语句将会中断(而 $1 始终被定义,即使未设置)。


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

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

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

【讨论】:

【参考方案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===

【讨论】:

这个答案的第二部分是匿名用户建议的编辑,这似乎是关于屏蔽同名环境变量的变量。我不确定它是否与问题相关,但我将其留在这里以防它对某人有用。【参考方案3】:

编辑:见下面的评论。

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

【讨论】:

你的条件倒退了。 $?1 的行为似乎与$?foo 的行为不同;似乎 $1 始终设置,即使没有传递相应的参数(这就是为什么如果您反转条件,您的解决方案会起作用)。 csh,相对于tcsh,不允许$?1 哎呀,是的,你是对的。虽然我对 tcsh 也有同样的看法,但 $?!始终定义。

以上是关于如何在 tcsh Shell 中检查变量是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中检查多个变量是不是为空

如何检查三个变量中是不是只有一个不为空?

如何检查变量是不是不为空?

PHP中判断变量值是不是为空的问题

如何检查字符串(变量)是不是为空?

shell判断是否为空