Can't store multiple arguments with read -p in macOS terminal using bash

by Nawra C   Last Updated May 15, 2019 19:12 PM

I am trying to store words from an input as parameters with read -p as follows :

    read -p "Enter your command: " cmd arg1 arg2
    echo "$cmd"
    echo "$arg1"
    echo "$arg2"

With this, $cmd contains all 3 inputs separated by spaces, $arg1 and $arg2 are empty. Any idea why ?



Answers 1


The variable IFS is used by various commands. The safest thing to do is save the value, then restore when finished. Below is an example.

declare "IFS_BACKUP=$IFS"
IFS=$' \t\n'
read -p "Enter your command: " cmd arg1 arg2
IFS="$IFS_BACKUP"
echo "$cmd"
echo "$arg1"
echo "$arg2"

The documentation command man bash defines IFS as follows:

   IFS    The  Internal  Field  Separator  that is used for word splitting
          after expansion and to split lines  into  words  with  the  read
          builtin  command.   The  default  value  is  ``<space><tab><new-
          line>''.
David Anderson
David Anderson
May 15, 2019 19:36 PM

Related Questions


Updated September 05, 2018 11:12 AM

Updated September 18, 2017 19:12 PM

Updated December 12, 2018 19:12 PM

Updated April 29, 2019 10:12 AM

Updated May 05, 2019 17:12 PM