2016-04-19 7 views
1

So lesen Sie eine Benutzereingabe nur unter bestimmten Bedingungen. Code folgendes funktioniert nicht in KSH:Lesebefehl funktioniert nicht in if-Anweisung. in ksh

if [[ $contract = "$fld1" ]];then 
    read position?"Enter the position of Contract number in m-n format,m should be less than n " 
fi 

-Code nicht in obiger Bedingung Benutzerruf nicht warten

+0

Betrachten wir die Werte von '$ contract' und' $ fld1' während der Ausführung mit 'gesetzt -x' zu überwachen. Da dies ein vollständig gültiger Code ist (zumindest in ksh93), ist die wahrscheinliche Erklärung, dass sie nicht * wirklich * gleich sind. –

+1

(... Ich muss mich fragen, wer eine Frage upvotes, ohne den Problemraum gut genug zu verstehen, um zu wissen, ob das von ihm identifizierte Problem echt ist). –

+0

Der obige Code funktioniert gut in meinem ksh. @CharlesDuffy, Vielen Dank für Ihre Kommentare zu [meine Antwort] (http://Stackoverflow.com/a/36731484/5832518). – Raju

Antwort

5

Der entsandte Code funktioniert gut unter KSH.

$ contract=c 
$ fld1=c 
$ if [[ $contract = "$fld1" ]];then 
> read position?"Enter the position of Contract number in m-n format,m should be less than n "       < 
> fi 
Enter the position of Contract number in m-n format,m should be less than n 1-2 
$ echo $position 
1-2 

In Antwort auf Igel Kommentar, können Sie eine weniger verwirrend prompt wie, dass man verwenden:

read position?"Enter the position of Contract number in m-n format, (m should be less than n) : " 

Beachten Sie, dass die read variable?prompt Syntax ist ksh spezifisch. Unter bash verwenden Sie read -p prompt variable. Ein tragbares Verfahren verwendbar auf den meisten Bourne-Syntax basiert Schalen wäre printf "%s" "$prompt" ; read variable

+0

tatsächlich funktioniert Ihr Code, aber es ist nicht korrekt, weil es nicht richtig funktioniert, drucken Sie nur die Nachricht, aber der Temrinal wartet nicht auf den Benutzer zu antworten ......... – hedgehog

+0

verdammt, ich sah es gerade, es tatsächlich Gibt die Zeile aus und erwartet, dass der Benutzer nach dem Echo eine Eingabe hinzufügt. das ist nur hässlich und sehr verwirrend, sogar ich musste 3 Minuten lang denken, bevor ich es bekomme, denk an einen Benutzer, lol ..... – hedgehog

+0

Es gibt kein 'echo', diese' Lese'-Syntax wurde immer von unterstützt 'ksh'. Ich verstehe nicht, dass ein Benutzer verwirrt ist, da er den Quellcode sowieso nicht sieht, nur die Eingabeaufforderung. – jlliagre

1

dies ist die Arbeitsversion des Codes:

if [[ $contract = "$fld1" ]];then 
echo "Enter the position of Contract number in m-n format,m should be less than n" 
read position 
fi 

, wenn Sie das Terminal wollen den Benutzer warten auf eine Antwort Sie die hinzufügen müssen Echo und das Lesen getrennt. Das funktioniert gut für Sie. Dies ist die Ausgabe:

Enter the position of Contract number in m-n format,m should be less than n 
##cursor waiting here for an input## 
+0

Diese Methode ist portabler, obwohl Sie 'printf '% s' anstelle von' echo' hätten verwenden sollen, aber nichts repariert. Die OP-Syntax funktioniert bereits unter 'ksh'. – jlliagre