공백으로 구분된 문자열을 Bash에서 배열로 읽기
공백으로 구분된 문자열을 포함하는 변수가 있습니다.
line="1 1.50 string"
이 문자열을 공백으로 구분하여 결과를 배열에 저장하여 다음을 수행합니다.
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
출력
1
1.50
string
어디선가 효과가 없는 솔루션을 찾았습니다.
arr=$(echo ${line})
이 후에 위의 echo 문을 실행하면 다음 메시지가 나타납니다.
1 1.50 string
[empty line]
[empty line]
나도 노력했어
IFS=" "
arr=$(echo ${line})
같은 결과를 낳았습니다.누가 좀 도와줄래요?
문자열을 배열로 변환하려면 문자열에서 배열을 생성하여 문자열이 다음 항목에 따라 자연스럽게 분할되도록 합니다.IFS
(내부 필드 구분 기호) 변수. 기본적으로 공백 문자입니다.
arr=($line)
스트링을 스틴에 전달하거나read
명령어를 지정합니다( )<<<
) 연산자:
read -a arr <<< "$line"
첫 번째 예에서는 따옴표를 주위에 사용하지 않는 것이 중요합니다.$line
스트링을 여러 요소로 분할할 수 있기 때문입니다.
참고 항목: https://github.com/koalaman/shellcheck/wiki/SC2206
입력:arr=( $line )
. "split"은 "glob"과 관련되어 있습니다.
와일드카드(*
,?
그리고.[]
)가 일치하는 파일명으로 전개됩니다.
올바른 솔루션은 조금 더 복잡할 뿐입니다.
IFS=' ' read -a arr <<< "$line"
글로벌 문제는 없습니다.스플릿 문자는 다음과 같이 설정됩니다.$IFS
, 변수는 따옴표로 묶습니다.
이것을 시험해 보세요.
arr=(`echo ${line}`);
매개 변수 확장이 필요한 경우 다음을 수행하십시오.
eval "arr=($line)"
예를 들어, 다음 코드를 사용합니다.
line='a b "c d" "*" *'
eval "arr=($line)"
for s in "${arr[@]}"; do
echo "$s"
done
현재 디렉터리에 파일이 포함되어 있는 경우a.txt
,b.txt
그리고.c.txt
코드를 실행하면 다음과 같은 출력이 생성됩니다.
a
b
c d
*
a.txt
b.txt
c.txt
line="1 1.50 string"
arr=$( $line | tr " " "\n")
for x in $arr
do
echo "> [$x]"
done
언급URL : https://stackoverflow.com/questions/9293887/reading-a-space-delimited-string-into-an-array-in-bash
'programing' 카테고리의 다른 글
문자열을 한 줄의 목록으로 변환하시겠습니까? (0) | 2023.04.12 |
---|---|
Bash 스크립트의 클립보드에 연결/연결 (0) | 2023.04.12 |
개체 목록에 특정 속성 값을 가진 개체가 포함되어 있는지 확인합니다. (0) | 2023.04.12 |
코드를 사용하여 데스크톱의 벽지를 변경합니다.그물 (0) | 2023.04.12 |
정수 배열을 쉼표로 구분된 문자열로 변환 (0) | 2023.04.12 |