如何在 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 totcsh
?
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
嵌套的if
s 是必需的以避免破坏脚本,因为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 中检查变量是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章