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