Как я могу проверить, пуста ли переменная или нет в Tcsh Shell?

если мне нужно проверить, что если переменная пуста или нет для этого в оболочке bash, я могу проверить со следующим скриптом:

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

но мне нужно преобразовать его в оболочку tcsh.

3 ответов


стандартные предупреждения относительно использования tcsh/csh применить, но вот перевод:

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

обратите внимание, что если бы вы использовали произвольное имя переменной, а не здесь оператор сломался бы, если бы эта переменная еще не была определена всегда определяется, даже если unset).


планирование случай, когда переменная, скажем $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 по-видимому, не короткое замыкание (an else if условие ветви будет оценено, даже если if вводится ветвь; аналогично, обе стороны && и || выражения, казалось бы,всегда evaluated-это относится, по крайней мере, к использованию неопределенных переменных).


Вы можете попробовать это (найти здесь):

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===

EDIT: см. комментарий ниже.

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