Шебанг #!/bin/sh
означает, что вы пишете код либо для исторической оболочки Bourne (все еще встречающейся в некоторых системах, таких как Solaris, я думаю), либо, что более вероятно, для стандартного языка оболочки, определенного в POSIX. Это означает, что read -p
и echo -n
ненадежны.
Стандартное / портативное решение:
printf 'Enter [y/n] : '
read -r opt
(-r
запрещает специальную обработку \
, поскольку read
обычно принимает это как продолжение строки, когда оно находится в конце строки.)
Если вы знаете, что ваш скрипт будет запускаться в системах с Bash, вы можете изменить шебанг на #!/bin/bash
(или #!/usr/bin/env bash
) и использовать все необычные функции Bash. (Многие системы имеют /bin/sh
символическую ссылку на bash
, поэтому он работает в любом случае, но полагаться на это - плохая практика, и bash
фактически отключает некоторые из своих собственных функций при выполнении под именем sh
.)