echo -n "Enter [y/n] : " ; read opt
O! (Dopo è meglio)
read -p "[y/n]: " opt
Lo shebang #!/bin/sh
significa che stai scrivendo codice per la shell Bourne storica (che si trova ancora su alcuni sistemi come Solaris, credo) o, più probabilmente, per il linguaggio shell standard come definito da POSIX. Ciò significa che read -p
e echo -n
sono entrambi inaffidabili.
La soluzione standard/portatile è:
printf 'Enter [y/n] : '
read -r opt
(Il -r
impedisce il trattamento speciale di \
, dal read
normalmente lo accetta come una continuazione di riga quando si trova alla fine di una riga.)
Se sai che il tuo script verrà eseguito su sistemi che hanno Bash, puoi cambiare shebang in #!/bin/bash
(o #!/usr/bin/env bash
) e utilizzare tutte le fantasiose funzionalità di Bash. (Molti sistemi hanno /bin/sh
collegato simbolicamente a bash
quindi funziona in entrambi i modi, ma fare affidamento su questo è una cattiva pratica e bash
in realtà disabilita alcune delle sue funzionalità quando viene eseguito con il nome sh
.)
Soluzione:read -p "Enter [y/n] : " opt
Da help read
:
-p prompt output the string PROMPT without a trailing newline before
attempting to read