¿Cómo podría leer la entrada del usuario como una matriz en el bash
shell?
command-line
bash
moata_u
fuente
fuente
cat war_and_peace.txt | ./array_test.sh
../array_test.sh < war_and_peace.txt
.Respuestas:
Aquí hay una forma de hacerlo:
Si solo lo ejecuta, seguirá leyendo desde la entrada estándar hasta que presione Ctrl + D (EOF). Luego, las líneas que ingresaste estarán en
my_array
. Algunos pueden encontrar este código confuso. El cuerpo del bucle básicamente dicemy_array = my_array + element
.Algunas piezas de documentación interesantes:
La Guía avanzada de secuencias de comandos Bash tiene un excelente capítulo sobre matrices
La página de manual de la lectura incorporada
15 ejemplos de matriz de thegeekstuff.com
fuente
read -r
es bastante útil / importante a veces ... El enlace de Stefano a la "página de manual integrada de lectura" explica su propósito ... (para evitar la interpretación de la barra invertida).Léalo usando esto:
Y para imprimir, use:
fuente
Y uno que no recrea la matriz cada vez (aunque requiere bash 3.1 o más reciente):
Ver http://mywiki.wooledge.org/BashFAQ/001 para más información.
Y como siempre, para evitar escribir errores, lea http://mywiki.wooledge.org/BashGuide y evite las guías tldp como la guía avanzada de secuencias de comandos bash.
fuente
IFS
problema. Sin anularlo, 'leer' borra todos los espacios en blanco iniciales y finales ... y, por supuesto,-r
también ...¿Qué tal este one-liner;)
Editar:
en
bash
,es la forma de asignar a una matriz . Al usarlo junto con la sustitución de comandos, puede leer en matrices de la tubería que no es posible usar
read
para lograr esto de una manera directa:Encontrará que no genera nada debido al hecho de que
read
no hace nada cuandostdin
trata de una tubería, ya que una tubería puede ejecutarse en una subshell para que la variable no sea utilizable en absoluto.Usando la forma sugerida por esta respuesta:
Proporciona
a b
cuál es la forma más simple y directa que cualquier solución alternativa dada por las respuestas de los valores de lectura en una variable de shell desde una tubería y en bash read después de que una tubería no está estableciendo valores .fuente