Сравнение двух предложений в tcsh

у меня есть программа

set signal="Normal Completion of program MRGGRID"`

if ( $signal == "Normal Completion of program MRGGRID" ) then
  echo "yes"
endif

Сообщение об ошибке

if: Expression Syntax.

person apple    schedule 11.03.2015    source источник


Ответы (1)


Вам нужно добавить кавычки вокруг переменной $signal в файле if.

tcsh расширяет переменные перед их использованием; вероятно, лучше не думать о них как о «переменных», а скорее как о «макросах», которые расширяются перед использованием, поэтому ваш оператор if интерпретируется как:

if ( Normal Completion of program MRGGRID == "Normal Completion of program MRGGRID" )

И не как:

if ( "Normal Completion of program MRGGRID" == "Normal Completion of program MRGGRID" )

Это не специфично для tcsh, оболочки Bourne также работают так... Но сообщения об ошибках tcsh почти всегда бесполезны (как вы видели), что является одной из причин, по которой обычно не рекомендуется использовать tcsh для сценариев.

person Martin Tournoij    schedule 11.03.2015
comment
Вы также можете использовать $signal:q вместо "$signal". - person Keith Thompson; 11.03.2015