如果我必须在bash shell中检查变量是否为空,我可以使用以下脚本进行检查:
if [ -z "$1" ]
then
echo "variable is empty"
else
echo "variable contains $1"
fi
但我需要将其转换为tcsh shell。
答案 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