echo -n "Enter [y/n] : " ; read opt
また! (遅いほうがいい)
read -p "[y/n]: " opt
シバン #!/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 という名前で実行すると、実際には独自の機能の一部が無効になります .)
解決策:read -p "Enter [y/n] : " opt
help read から :
-p prompt output the string PROMPT without a trailing newline before
attempting to read