2014-03-25 13 views
15

IF Ich muss überprüfen, dass, wenn eine Variable leer ist oder nicht, dass in Bash-Shell kann ich mit dem folgenden Skript überprüfen:Wie kann ich überprüfen, ob eine Variable leer ist oder nicht in tcsh Shell?

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

Aber ich brauche es in tcsh Shell zu konvertieren.

+1

[Sind Sie sicher, dass Sie es konvertieren sollte 'tcsh'?] (Http://www.grymoire.com/unix/CshTop10.txt) – chepner

+0

Tcsh ist für die Programmierung nicht geeignet, aber versuchen Sie dies:' if ("x $ 1" == "x") '. –

Antwort

23

Die Standard-Warnungen in Bezug auf den Einsatz von tcsh/csh gelten, aber hier ist die Übersetzung:

if ("$1" == "") then  # parentheses not strictly needed in this simple case 
    echo "variable is empty" 
else 
    echo "variable contains $1" 
endif 

Beachten Sie jedoch, dass, wenn Sie lieber einen beliebigen Variablennamen verwenden waren als $1 in den oben genannten, Die -Anweisung würde brechen, wenn diese Variable noch nicht definiert wurde (wobei $1 immer definiert ist, selbst wenn nicht gesetzt).


für den Fall zu planen, wo eine Variable, $var sagen, nicht definiert werden kann, es wird schwierig:

if (! $?var) then  
    echo "variable is undefined" 
else 
    if ("$var" == "") then 
     echo "variable is empty" 
    else 
     echo "variable contains $var" 
    endif 
endif 

Die verschachtelten if s zu vermeiden, das Skript benötigt brechen , wie tcsh anscheinend nicht kurzgeschlossen (eine else if Verzweigung bedingte wird ausgewertet, auch wenn die if Zweig eingegeben wird, ähnlich, beide Seiten von && und || Ausdrücke sind scheinbar immer ausgewertet - das gilt zumindest in Bezug auf die Verwendung von nicht definierten Variablen.

+0

fehlende Klammer dort ... –

+1

@MarkArmstrong: Danke; (Zumindest in tcsh 6.17.00) funktioniert es tatsächlich _without_ die Klammern mit den _non-compound_-Bedingungen zur Verfügung - im Gegensatz, wenn Sie so etwas wie 'a && b' verwenden, sind die Klammern _are_ benötigt. Das heißt, wenn man sich im Internet umschaut, scheint es gängige Praxis zu sein, immer Klammern zu verwenden, also habe ich meinen Beitrag aktualisiert. – mklement0

2

können Sie versuchen, diese (found here):

set name 
if (${%name} == 0) then 
     echo " Variable name has 0 characters as value." 
endif 

Beachten Sie, dass die Person, die gepostet die folgende Signatur hat:

Standard-Beratung: csh Familie für Skripting vermeiden.

0

EDIT: siehe Kommentar unten.

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

Sie haben die Bedingung rückwärts. Das Verhalten von "$? 1" scheint sich von dem Verhalten von "$? Foo" zu unterscheiden; Es scheint, dass "$ 1" immer gesetzt ist, auch wenn kein entsprechendes Argument übergeben wurde (weshalb Ihre Lösung funktioniert, wenn Sie die Bedingung umkehren). 'csh', im Gegensatz zu' tcsh', erlaubt '$? 1' nicht. –

+0

oops, ja, du hast Recht. Obwohl ich dasselbe auch für Tcsh bekomme, $ ?! immer definiert. – DrGC

Verwandte Themen