Especificar los nombres de los argumentos es opcional. El comando almacena la entrada de un usuario en $REPLY
variable por defecto.
La siguiente tabla muestra todas las opciones de comando posibles y su descripción.
Opción | Descripción |
-a <array> | Asigna la secuencia de palabras proporcionada a una variable llamada <array> . |
-d <delimiter> | Lee una línea hasta el <delimiter> proporcionado en lugar de una nueva línea. |
-e | Inicia una sesión de shell interactiva para obtener la línea a leer. |
-i <prefix> | Agrega texto inicial antes de leer una línea como prefijo. |
-n <number> | Regresa después de leer el número especificado de caracteres respetando el delimitador para terminar antes. |
-N <number> | Regresa después de leer el número especificado de caracteres, ignorando el delimitador. |
-p <prompt> | Envía la cadena de mensaje antes de leer la entrada del usuario. |
-r | Deshabilitar barras diagonales inversas para caracteres de escape. |
-s | No repite la entrada del usuario. |
-t <time> | El comando expira después del tiempo especificado en segundos. |
-u <file descriptor> | Leer del descriptor de archivo en lugar de la entrada estándar. |
Continúe leyendo para ver cómo funciona el comando de lectura funciona a través de varios ejemplos.
Bash leer ejemplos
El read
funciones de comando sin argumentos ni opciones. Para probar el comando, siga los pasos a continuación:
1. Abra la terminal.
2. Escribe el comando y presiona Enter :
read
El indicador espera la entrada del usuario.
3. Escribe una oración y presiona Entrar .
El terminal vuelve a su estado normal.
4. Recupera el mensaje con el comando echo:
echo $REPLY
El $REPLY
variable almacena la read
mensaje de comando.
A continuación se muestran ejemplos que demuestran casos de uso más complejos para Bash read
comando.
Argumentos
Guarde la entrada del usuario en una variable específica proporcionando un argumento:
read input
Recuperar el mensaje con:
echo $input
Alternativamente, divida la entrada del usuario en diferentes variables agregando múltiples argumentos.
Por ejemplo:
read var1 var2
La entrada del usuario se divide en palabras individuales. Recupéralas con:
echo $var1
echo $var2
Cuando la entrada del usuario tiene más palabras que variables, las palabras adicionales se asignan a la última variable proporcionada:
read var1 var2
foo bar baz
echo $var1
echo $var2
Si hay menos palabras que variables, las variables restantes están vacías.
Tuberías
Piping toma la salida estándar de un comando y la analiza como entrada estándar para otro proceso. Usar echo
y canalice la información para read
para el análisis inmediato. Por ejemplo:
echo "Hello world!" | (read var1 var2; echo $var1; echo $var2)
Los paréntesis crean una subcapa con varios comandos y las variables individuales se imprimen en la consola.
Heredoc
Otra forma de ingresar texto en el read
El comando está usando la notación heredoc. Por ejemplo:
read var1 var2 <<< "Hello world!"
echo $var1
echo $var2
El read
El comando espera un literal de flujo de entrada y el identificador de redirección (<<<
) ingresa la cadena aquí.
Delimitadores
El read
El comando define dos tipos de delimitadores:
1. El delimitador para read
dominio.
De forma predeterminada, al pulsar Intro (nueva línea) finaliza el comando. Agregue el -d
etiquete y proporcione un delimitador diferente entre comillas para terminar de manera diferente.
Por ejemplo:
read -d "-"
En lugar de una nueva línea, el nuevo delimitador es un guión (-
) en lugar de una nueva línea. El comando termina al llegar al delimitador, sin tener en cuenta el número de argumentos. La respuesta en $REPLY
o la variable proporcionada almacena la entrada del usuario sin el guión (-
).
2. El delimitador para dividir campos.
La variable $IFS
(Separador de campo interno) almacena los delimitadores de palabras. El valor predeterminado por el que se dividen las palabras es un espacio " ". Establecer el $IFS
variable a un valor diferente para controlar este comportamiento.
Por ejemplo, para separar palabras con guiones, use:
IFS="-"
echo "Hello-world!" | (read var1 var2; echo $var1; echo $var2)
Agregue diferentes separadores para dividir campos por diferentes valores:
IFS="-_"
echo "Hello_world-!" | (read var1 var2 var3; echo $var1; echo $var2; echo $var3)
El separador tiene una longitud de un carácter y $IFS
toma cada divisor indicado individualmente.
Aviso
Use el comando de lectura para crear avisos interactivos. Agrega el -p
etiquete y proporcione el texto del aviso, por ejemplo:
read -p "Enter your username: " username
El texto del mensaje se imprime y requiere la entrada del usuario. El texto se guarda en la variable $username
.
echo Your username is $username.
Usa el -p
opción en los scripts de Bash para trabajar con la creación de avisos.
Ocultar entrada de usuario
El read
El comando ofrece el -s
etiqueta para ocultar la entrada de información confidencial. Un caso de uso común es combinar -s
con -p
etiqueta para crear una solicitud de contraseña.
Por ejemplo:
read -p "Enter your password: "$'\n' -s password
La entrada del usuario es invisible. Sin embargo, hacer eco del mensaje muestra la contraseña:
echo $password
Tenga cuidado con este comportamiento cuando use read
en scripts que solicitan contraseñas.
Establecer límite de caracteres
El comando de lectura ofrece dos opciones al limitar el número de caracteres para la entrada del usuario:
1. Utilice el -n
y proporcione un número para establecer el límite de caracteres. Por ejemplo:
read -n 3
Pulsa Intro después de un carácter para finalizar el comando antes de alcanzar el límite de caracteres. Sin pulsar Intro , el comando sale automáticamente después de tres caracteres.
2. Usa el -N
y proporcione un número para establecer el límite de caracteres mientras ignora el delimitador. Por ejemplo:
read -N 3
Pulsando Intro no finaliza el comando. Sin embargo, la pulsación de tecla cuenta como un carácter.
Establecer tiempo de espera
Establecer un tiempo de espera en read
para limitar el tiempo necesario para introducir texto:
read -t 5
El comando finaliza automáticamente después del límite de tiempo proporcionado.
Arreglos
En lugar de usar variables individuales para almacenar una cadena, agregue el -a
opción para guardar la entrada en una matriz. Por ejemplo:
read -a array <<< "Hello world!"
Recupere los elementos de la matriz con:
echo ${array[0]}
echo ${array[1]}
Alternativamente, use un bucle for para iterar a través de la matriz.
Caracteres de escape y barras invertidas
El read
El comando permite dividir entradas largas en varias líneas usando barras invertidas. Por ejemplo:
read password prompt terminal output
Hello \
world\
!
Pulsando Intro después de la barra invertida no finaliza el comando y espera más información en la siguiente línea.
Para ignorar la interpretación de la barra invertida, agregue -r opción:
read -r <<< "Hello\world!"; echo $REPLY
Use esta opción cuando analice rutas de archivos y cualquier texto donde la barra invertida tenga significado.