다음은 두 개의 명령문입니다 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
배열과 mapfile
AKA readarray
내장 배열을 사용해 보세요. help mapfile
자세히보다. mapfile
의 옵션에 빈 문자열을 인수로 제공하면 -d
NUL이 구분 기호로 사용됩니다.
먼저 임의의 구분 기호를 사용하여 배열을 단일 문자열로 연결할 수 있는 함수를 만듭니다.
$ 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