La commande de lecture ne fonctionne pas dans l’instruction if. dans ksh

Comment lire une entrée utilisateur uniquement sous certaines conditions. Le code suivant ne fonctionne pas dans ksh:

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

Le code n’attend pas l’invite de l’utilisateur dans la condition ci-dessus

Le code affiché fonctionne correctement sous ksh.

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

En réponse au commentaire de hedgehog, vous pouvez utiliser une invite moins confuse comme celle-ci:

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

Notez que la syntaxe d’ read variable?prompt est spécifique à ksh . Sous bash vous utiliserez read -p prompt variable . Une méthode portable utilisable sur la plupart des shells à syntaxe Bourne serait printf "%s" "$prompt" ; read variable printf "%s" "$prompt" ; read variable

c’est la version de travail de votre code:

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

Si vous souhaitez que le terminal attende l’utilisateur pour une réponse, vous devez append l’écho et la lecture séparément. Cela fonctionne bien pour vous. Ceci est la sortie:

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