Как я могу проверить, является ли переменная пустой или нет в оболочке tcsh?
Если мне нужно проверить, что переменная пуста или нет для этого в оболочке bash, я могу проверить с помощью следующего скрипта:
if [ -z "$1" ]
then
echo "variable is empty"
else
echo "variable contains $1"
fi
Но мне нужно преобразовать его в оболочку tcsh.
3 ответа:
Стандартные предупреждения относительно использования
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
s требуются , чтобы избежать разрыва скрипта, так какtcsh
, по-видимому, не замыкается (условная ветвьelse if
будет вычислена, даже если введена ветвьif
; аналогично, обе стороны выражений&&
и||
, по - видимому, всегда вычисляются-это относится, по крайней мере, к использованию неопределенных переменных).
Вы можете попробовать это (найти здесь):
Обратите внимание, что лицо, опубликовавшее это сообщение, имеет следующую подпись: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===