Tengo algo como esto:
declare -a DISPLAYS
AUXILIAR="$(xrandr | grep " connected ")"
IFS=$'\n' read -ra DISPLAYS <<< "$AUXILIAR"
¿Por qué no detecta saltos de línea si?
echo "$AUXILIAR"
¿Imprimir más de una línea?
ACTUALIZAR
Este trabajo concluyó:
AUXILIAR="$(xrandr | grep " connected " | tr '\n' '%')"
IFS='%' read -ra DISPLAYS <<< $(echo $AUXILIAR)
Todavía quiero saber por qué no se dividió en líneas de rotura.
Respuesta1
De forma predeterminada, read
solo será de solo lectura.una línea a la vez. Por ejemplo, aquí proporcionamostreslíneas de entrada y, como puede ver, read
solo lee la primera línea:
$ IFS=$'\n' read -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a")'
La -d
opción se puede utilizar para cambiar este comportamiento. Por ejemplo:
$ IFS=$'\n' read -d '' -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")
Aquí -d ''
se utilizó. Esto le indica read
que lea hasta que encuentre un carácter NUL. Dado que nunca puede haber un carácter NUL en una cadena bash, esto hace que lea toda la entrada que proporcionamos con la cadena aquí.
Usando %
$ IFS=% read -ra displays <<< 'a%b%c'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")'
Usar %
funciona porque read
continúa leyendo pasado %
. De forma predeterminada, solo se detiene con caracteres de nueva línea.
Otro
Se considera una buena práctica utilizar nombres en minúsculas o en mayúsculas mixtas para las variables. El sistema utiliza nombres en mayúsculas y no querrás sobrescribir accidentalmente uno de ellos. Por ejemplo, DISPLAY
es una variable del sistema y podrían ocurrir muchos problemas desagradables si se sobrescribiera.