0 votos

No se pueden almacenar varios argumentos con read -p en el terminal de macOS usando bash

Estoy tratando de almacenar palabras de una entrada como parámetros con read -p de la siguiente manera:

    read -p "Ingrese su comando: " cmd arg1 arg2
    echo "$cmd"
    echo "$arg1"
    echo "$arg2"

Con esto, $cmd contiene las 3 entradas separadas por espacios, $arg1 y $arg2 están vacíos. ¿Alguna idea de por qué?

0 votos

¿Cuál es el valor de $IFS?

0 votos

@nohillside devuelve ':'

0 votos

Establece IFS de nuevo a su valor por defecto. En otras palabras, añade el comando IFS=$' \t\n' antes del comando read.

1voto

David Anderson Puntos 2189

La variable IFS es utilizada por varios comandos. Lo más seguro es guardar su valor y luego restaurarlo cuando haya terminado. A continuación se muestra un ejemplo.

declare "IFS_BACKUP=$IFS"
IFS=$' \t\n'
read -p "Ingrese su comando: " cmd arg1 arg2
IFS="$IFS_BACKUP"
echo "$cmd"
echo "$arg1"
echo "$arg2"

El comando de documentación man bash define IFS de la siguiente manera:

   IFS    El Separador de Campos Interno que se utiliza para dividir palabras
          después de la expansión y para dividir líneas en palabras con el
          comando integrado read.  El valor predeterminado es ``''.

0 votos

Gracias, esto funcionó. Intentaré comprender más sobre IFS

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X