Подтвердить что ты не робот

Shell Script, прочитайте на той же строке после эхо-сообщения

После оболочки script, которую я выполняю

#!/bin/sh

echo "Enter [y/n] : "
read opt

Его вывод

Enter [y/n] : 
Y

Я хочу, чтобы переменная читалась на той же строке, что и ниже

Enter [y/n] : Y

Должен быть простым, я думаю, но я новичок в bash сценариях.

4b9b3361

Ответ 1

Shebang #!/bin/sh означает, что вы пишете код для исторической оболочки Bourne (все еще найденной в некоторых системах, например Solaris), или, скорее, стандартный язык оболочки, определенный POSIX. Это означает, что read -p и echo -n обе ненадежны.

Стандартное/портативное решение:

printf 'Enter [y/n] : '
read -r opt

(-r предотвращает специальную обработку \, так как read обычно принимает это как продолжение строки, когда оно находится в конце строки.)

Если вы знаете, что ваш script будет запущен в системах с Bash, вы можете изменить shebang на #!/bin/bash (или #!/usr/bin/env bash) и использовать все фантастические функции Bash. (Многие системы имеют /bin/sh, символически привязанные к bash, поэтому он работает в любом случае, но полагаться на это - на плохую практику, а bash фактически отключает некоторые свои функции при выполнении под именем sh.)

Ответ 2

Решение: read -p "Enter [y/n] : " opt

От help read:

  -p prompt output the string PROMPT without a trailing newline before
        attempting to read

Ответ 3

echo -n "Enter [y/n] : " ; read opt

OR! (Позже лучше)

read -p "[y/n]: " opt