Ответ 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
.)