2016-04-19 10 views
1

特定の条件でのみユーザー入力を読み取る方法。コードに続いて、kshのでは動作しません:if文の中でReadコマンドが動作しません。 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 

コードが投稿されたコードは、kshの下だけで正常に動作し、上記の条件でユーザプロンプト用

+0

は ''実行中の$ contract'と '$のfld1'の値を監視するために-x'設定し使用することを検討してください。これは(少なくともksh93で)完全に有効なコードなので、実際には同等ではありません。 –

+1

(...問題のスペースを十分に理解することなく誰かが質問をアップボートしているかどうか疑問を呈しています。 –

+0

上記のコードは私のkshでうまくいきます。 @CharlesDuffy、[私の答え](http://stackoverflow.com/a/36731484/5832518)にあなたのコメントありがとう。 – Raju

答えて

5

を待ちません。ハリネズミさんのコメントに答えて

$ 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 

、あなたはその1つのように少ない混乱プロンプトを使用する場合があります:read variable?prompt構文はksh特異的であることを

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

注意。 bashの下にはread -p prompt variableを使用します。あなたが追加する必要がありますが、端末が応答するためのユーザーを待ちたい場合

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

:ほとんどのBourne構文ベースのシェル上で使用可能なポータブル方法は、これはあなたのコードの作業バージョンですprintf "%s" "$prompt" ; read variable

+0

実際にあなたのコードは動作しますが、それは正しく動作しないため正しくないので、あなたはメッセージを出力しますが、temrinalはユーザが返信を待つことはありません....... – hedgehog

+0

ちょうどそれを実際に見ました行を出力し、ユーザーがエコーを入力する前に入力権を期待していますか?それはちょうど醜いと非常に混乱して、私も、私はそれを得る前に、3分を考える必要があった、笑... – hedgehog

+0

'エコー'はありません、この '読み取り'構文は常に'ksh'。とにかくソースコードが表示されず、プロンプトだけが表示されるため、ユーザーが混乱しているというあなたのコメントは得られません。 – jlliagre

1

だろうエコーと読みは別々に。 これは正常に動作します。 これが出力されます。

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

この方法はもっと移植性がありますが、 'echo'の代わりに' printf "%s'を使ってはいますが、何も修正しません。 – jlliagre

関連する問題