나는 다음과 같은 것을 가지고 있습니다 :
declare -a DISPLAYS
AUXILIAR="$(xrandr | grep " connected ")"
IFS=$'\n' read -ra DISPLAYS <<< "$AUXILIAR"
줄 바꿈을 감지하지 못하는 이유는 무엇입니까?
echo "$AUXILIAR"
두 줄 이상을 인쇄하시겠습니까?
업데이트
이 작업은 다음과 같습니다.
AUXILIAR="$(xrandr | grep " connected " | tr '\n' '%')"
IFS='%' read -ra DISPLAYS <<< $(echo $AUXILIAR)
왜 구분선으로 분할되지 않았는지 아직도 알고 싶습니다.
답변1
기본적으로 read
읽기 전용입니다.한 번에 한 줄. 예를 들어, 여기서 우리는 제공합니다삼보시다시피 read
첫 번째 줄만 읽습니다.
$ IFS=$'\n' read -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a")'
옵션 -d
을 사용하여 이 동작을 변경할 수 있습니다. 예를 들어:
$ IFS=$'\n' read -d '' -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")
여기서는 -d ''
사용되었습니다. 이는 read
NUL 문자를 찾을 때까지 읽도록 지시합니다. Bash 문자열에는 NUL 문자가 있을 수 없으므로, 이로 인해 here-string과 함께 제공되는 모든 입력을 읽게 됩니다.
% 사용
$ IFS=% read -ra displays <<< 'a%b%c'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")'
과거를 계속 읽기 %
때문에 작품을 사용합니다 . 기본적으로 개행 문자에 대해서만 중지됩니다.read
%
다른
변수에 소문자 이름이나 대소문자 혼합 이름을 사용하는 것이 모범 사례로 간주됩니다. 시스템은 대문자 이름을 사용하므로 실수로 그 중 하나를 덮어쓰는 것을 원하지 않습니다. 예를 들어, DISPLAY
시스템 변수이며 덮어쓰면 많은 불쾌한 문제가 발생할 수 있습니다.