Enhancing scripts with read prompts

We have seen how we can use the built-in read to populate a variable. So far, we have used echo to produce the prompt, but this can be passed to read itself using the -p option. The read command will surpass the additional linefeed, so we reduce both the line count and the complexity to some degree.

We can test this at the command line itself. Try typing the following command to see read in action:

$ read -p "Enter your name: " name

We use the read command with the -p option. The argument that follows the option is the text that appears in the prompt. Normally, we would make sure that there is a trailing space at the end of the text to ensure that we can clearly see what we type. The last argument supplied here is the variable we want to populate; we simply call it name. Variables are case-sensitive too. Even if we do not supply the last argument, we can still store the user's response, but this time in the REPLY variable.

When we return the value of a variable, we use $, but not when we write it. In simple terms, when reading a variable we refer to $VAR and when setting a variable we refer to VAR=value.

The read command with syntax using the -p option is shown as follows:

read -p <prompt> <variable name>

We can edit the script so that it appears similar to the following extract from hello3.sh:

#!/bin/bash
read -p "May I ask your name: " name
echo "Hello $name"
exit 0

The read prompt cannot evaluate commands within the message string, such as those we used before.