VAR=a,b,c,d
# VAR=$(echo $VAR|tr -d '\n')
echo "[$VAR]"
readarray -td, ARR<<< "$VAR"
declare -p ARR
결과:
[a,b,c,d]
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]=$'d\n')
readarray
마지막 줄 바꿈을 추가하지 말라고 어떻게 알 수 \n
있습니까? 최신 $
기호 의 의미는 무엇입니까 ?
VAR=a,b,c,d
# VAR=$(echo $VAR|tr -d '\n')
echo "[$VAR]"
readarray -td, ARR<<< "$VAR"
declare -p ARR
결과:
[a,b,c,d]
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]=$'d\n')
readarray
마지막 줄 바꿈을 추가하지 말라고 어떻게 알 수 \n
있습니까? 최신 $
기호 의 의미는 무엇입니까 ?
답변:
암시 후행 개행 문자입니다 하지 에 의해 추가 readarray
내장,하지만 여기에 문자열 (가 <<<
)의 bash
참조 떠들썩한 여기에 문자열이 뒤에 줄 바꿈 문자를 추가 않는 이유는 무엇입니까? . 줄 바꿈없이 문자열을 인쇄하여 printf
프로세스 대체 기술을 통해 읽음으로써이를 제거 할 수 있습니다.< <()
readarray -td, ARR < <(printf '%s' "$VAR")
declare -p ARR
지금 제대로 생성
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]="d")
split + glob를 사용할 수 있습니다 (목록 컨텍스트에서 확장을 인용 부호로 남겨두면 어떻게됩니까). 대부분의 경우 방해가되므로 실제로 필요할 때 사용하지 않는 것은 부끄러운 일입니다.
IFS=,
set -o noglob
ARR=($VAR) # split+glob with glob disabled, and split using , as delimiter
그것은 임시 파일을 쓰는 것보다 조금 덜 복잡 readarray
하고 readarray <<< "$string"
접근 방식 과 같이 호출 합니다 ( readarray -d
최신 버전의 버전 이 필요합니다 bash
).
참고는에도 불구하고 있음 S
에가 IFS
(의미있는 분리 ), 즉 같은 방식으로 작동 readarray
한다는 점에서 a,,b,
로 분할 "a"
, ""
그리고 "b"
단지.
실제 분할 연산자의 경우 zsh
대신 사용할 수 있습니다 .
ARR=("${(@s:,:)VAR}")
( @
빈 요소를 보존하기 위해 및 큰 따옴표).
readarray <<< "$string"
tempp 파일에 기록하고 메모리를 사용하는 대신 그것을 삭제?
readarray -d
@ StéphaneChazelas '답변의 통조림 버전 :
# usage: setarray varname sep string
setarray(){ declare -n a=$1; local IFS=$2 -; set -f; a=($3); }
$ setarray arr , 1,2,3,
$ declare -p arr
declare -a arr=([0]="1" [1]="2" [2]="3")
$ setarray path : "$PATH"
$ setarray ld_preload ': ' "$LD_PRELOAD" # its elements can be separated by either ':' or spaces
...
는 local -
같은 옵션을 만들 것입니다 set -f
( noglob
다만 변수로 함수에 지역을).
는 로 명명 된 전역 변수 (함수의 첫 번째 인수) 의 별칭으로 로컬 변수 를 declare -n a=$1
만듭니다 .a
$1
"What is the meaning of the latest $ symbol?"