공백으로 구분 된 문자열이 포함 된 변수가 있습니다.
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})
같은 결과로. 누군가 도와 줄 수 있습니까?
답변
문자열을 배열로 변환하려면
arr=($line)
또는
read -a arr <<< $line
트릭을 수행하므로 따옴표를 사용하지 않는 것이 중요합니다.
답변
이 시도:
arr=(`echo ${line}`);
답변
에서 : arr=( $line )
. “분할”은 “글로브”와 관련이 있습니다.
와일드 카드 ( *
, ?
및 []
)는 일치하는 파일 이름으로 확장됩니다.
올바른 해결책은 약간 더 복잡합니다.
IFS=' ' read -a arr <<< "$line"
글 로빙 문제가 없습니다. 분할 문자는 $IFS
변수에 인용 된로 설정됩니다 .
답변
매개 변수 확장이 필요한 경우 다음을 시도하십시오.
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