сценарий tcsh, если оператор

Мне нужно перебрать кучу разных сценариев (переменная сцена), но я не могу понять, как использовать операторы if в сценарии оболочки tcsh. Получение ошибки «if: Синтаксис выражения». Может кто-нибудь сказать мне, что я не так? Далее следует упрощенный код! Спасибо!

#!/bin/tcsh -f
#
set val = 0

foreach scen ( a b )

echo $scen

if ($scen==a) then
  echo $scen
else
  echo $val
endif
end

person user50679    schedule 05.11.2013    source источник
comment
Я попытался добавить квадратные скобки вместо круглых скобок в операторе foreach и получил ошибку foreach: слова не заключены в круглые скобки.   -  person user50679    schedule 06.11.2013
comment
Попытался добавить квадратные скобки вместо круглых скобок в операторе if и получил ошибку [a==a]: нет совпадения.   -  person user50679    schedule 06.11.2013
comment
Квадратные скобки — это синтаксис sh/bash/ksh/zsh, а не csh/tcsh.   -  person Keith Thompson    schedule 06.11.2013


Ответы (1)


Решение вашей проблемы

Очевидно, вам нужны пробелы вокруг сравнения равенства ==. Это работает:

#!/bin/tcsh -f
#
set val = 0

foreach scen ( a b )

echo $scen

if ($scen == a) then
  echo $scen
else
  echo $val
endif
end

производство:

a
a
b
0

Непрошеный совет

Кроме того, если вам не нужно использовать здесь tcsh, я предлагаю использовать лучшую оболочку, такую ​​​​как bash или zsh. Вот несколько аргументов против csh и tcsh:

Для сравнения вот ваш код в bash (и zsh):

#!/bin/bash

# No space around equal sign in assignment!
val=0

for scen in a b; do
  echo $scen

  if [[ $scen == a ]]; then
    echo $scen
  else
    echo $val
  fi
done

Здесь нет существенной разницы, но см. приведенные выше статьи для примеров, когда csh был бы плохим выбором.

person ntc2    schedule 05.11.2013