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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Обратите внимание, что лицо, опубликовавшее это, имеет следующую подпись:

Стандартный совет: избегайте использования семейства csh для создания сценариев.

Ответ 3

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

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