5

一連のさまざまなシナリオ (変数シーン) をループする必要がありますが、tcsh シェル スクリプトで if ステートメントを使用する方法がわかりません。「if: Expression Syntax」というエラーが表示される 簡略化されたコードは次のとおりです。ありがとう!

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

foreach scen ( a b )

echo $scen

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

1 に答える 1

12

あなたの問題の解決策

どうやら equal comparison の周りにスペースが必要です==。これは機能します:

#!/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 が不適切な選択となる例については、上記の記事を参照してください。

于 2013-11-05T21:30:02.787 に答える