Null로 구분된 문자열 분할

Null로 구분된 문자열 분할

다음은 두 개의 명령문입니다 read. 하나는 공백을 구분 기호로 사용하고 다른 하나 \0는 첫 번째 명령문만 유효합니다. 두 번째는 내가 뭘 잘못한 걸까?

$ IFS=' '; read first second  < <(printf "%s " "x" "y" ); echo "$first+$second"

x+y

$ IFS=$'\0'; read first second  < <(printf "%s\0" "x" "y" ); echo "$first+$second"

좌표+

답변1

배열과 mapfileAKA readarray내장 배열을 사용해 보세요. help mapfile자세히보다. mapfile의 옵션에 빈 문자열을 인수로 제공하면 -dNUL이 구분 기호로 사용됩니다.

먼저 임의의 구분 기호를 사용하여 배열을 단일 문자열로 연결할 수 있는 함수를 만듭니다.

$ joinarray() { local IFS="$1"; shift; echo "$*"; }

이는 첫 번째 인수를 출력 구분 기호로 사용한 다음 echo를 사용하여 나머지 인수를 단일 문자열로 인쇄합니다. 이는 배열 연결에만 국한되지 않고 모든 인수(배열, 스칼라 변수, 고정 문자열)와 함께 작동하지만 특히 배열과 함께 사용할 때 유용합니다. joinarray표준 명령과 충돌하지 않도록 호출됩니다 join.

그런 다음 "$array"라는 배열을 사용합니다.

$ mapfile -d '' array < <(printf "%s\0" "x" "y" )   # read the data into $array

$ declare -p array                  # show that the data was read correctly
declare -a array=([0]="x" [1]="y")

$ joinarray + "${array[@]}"         # output the array joined by + characters
x+y

관련 정보