Question

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?

Was it helpful?

Solution

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>''.
Licensed under: CC-BY-SA with attribution
Not affiliated with apple.stackexchange
scroll top