web-dev-qa-db-ja.com

tcshシェルで変数が空かどうかを確認するにはどうすればよいですか?

Bashシェルで変数が空かどうかを確認する必要がある場合は、次のスクリプトで確認できます。

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

しかし、それをtcshシェルに変換する必要があります。

27
ramkrishna

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

ネストされたifsが必要ですtcshは明らかに短絡しないので、スクリプトの破損を回避します(else ifブランチの条件は評価されますifブランチが入力された場合;同様に、&&および||式の両側は一見always評価済み-これは、少なくとも未定義の変数の使用に関して適用されます)。

35
mklement0

これを試すことができます( こちらにあります ):

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===
2
Tom Fenech

編集:以下のコメントを参照してください。

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