2016-04-19 2 views
1

Как читать ввод пользователя только при определенных условиях. Следующий код не работает в KSH:Команда чтения не работает внутри оператора if. 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 

код не ждать подсказки пользователя в вышеописанном состоянии

+0

Рассмотрите возможность использования 'установить -x' контролировать значения' $ contract' и '$ fld1' во время выполнения. Так как это вполне допустимый код (по крайней мере, в ksh93), вероятным объяснением является то, что они не * действительно * равны. –

+1

(... Я должен задаться вопросом, кто поднимает вопрос, не понимая проблемного пространства достаточно хорошо, чтобы узнать, является ли проблема, которую он идентифицирует, является подлинной). –

+0

Выше кода хорошо работает в моем ksh. @CharlesDuffy, Спасибо за ваши комментарии по [моему ответу] (http://stackoverflow.com/a/36731484/5832518). – Raju

ответ

5

Опубликованного код прекрасно работает под 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 

В ответ на комментарий ежа, вы можете использовать менее запутанную подсказку, как эти один:

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

Обратите внимание, что синтаксис read variable?prompt является ksh специфичен. Под номером bash вы будете использовать read -p prompt variable. Портативный метод можно использовать на большинстве оболочек на основе синтаксиса Bourne будет printf "%s" "$prompt" ; read variable

+0

на самом деле ваш код работает, но его не правильно, потому что он не работает должным образом, вы только печатаете сообщение, но temrinal не ждет, когда пользователь даст ответ ........ – hedgehog

+0

черт возьми, я только что увидел его, это на самом деле печатает строку и ожидает, что пользователь добавит входной правый aftet echo ?? thats просто уродливый и очень запутанный, даже я, должен был думать за 3 минуты, прежде чем я его получу, подумайте о пользователе, lol ..... – hedgehog

+0

Нет 'echo', этот синтаксис' read' всегда поддерживался 'ksh'. Я не получаю ваш комментарий о том, что пользователь путается, так как он не видит исходный код в любом случае, только приглашение. – jlliagre

1

это рабочая версия кода:

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

, если вы хотите, чтобы терминал ждать пользователя для ответа вы должны добавить эхо и чтение отдельно. Это прекрасно работает для вас. Это выход:

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

Этот метод более переносимый, хотя вы должны использовать 'printf '% s' вместо' echo', но он ничего не исправляет. Синтаксис OP уже отлично работает под 'ksh'. – jlliagre

Смежные вопросы