Domanda

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?

È stato utile?

Soluzione

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>''.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a apple.stackexchange
scroll top