다음과 같은 변수가 있습니다.
col=1,3,4,
변수에서 숫자를 선택하는 방법이 있습니까? (예: 1 3 4 를 사용합니까?
예를 들어 파일에서 "1", "3" 또는 "4" 열을 선택합니까 .txt
?
답변1
몇 가지 마법을 사용할 수 있습니다 read
.
i=1,2,3,; echo $i | { IFS=","; read a b c; echo "$a|$b|$c"; }
i=1,2,3,; read a b c <<<$(IFS=","; echo $i); echo "$a|$b|$c"
i=1,2,3,; echo $i | { while read -d\, j; do echo $j; done; }
답변2
변수 수(1 3 4)를 선택하여 사용하는 방법이 있습니까?
$ col=1,3,4,; IFS=","; for i in $col; do echo "i= $i"; done
i= 1
i= 3
i= 4
그러나 내부 필드 구분 기호( IFS
)를 변경하는 것은 시스템 전체 변수이고 많은 응용 프로그램이 기본값에 의존하기 때문에 위험할 수 있습니다. 따라서 수정이 필요할 때마다 원래 값을 저장하고 복원하는 것이 좋습니다.
$ col=1,3,4,
$ OLDIFS=$IFS
$ IFS=","; for i in $col; do echo "i= $i"; done
i= 1
i= 3
i= 4
$ IFS=$OLDIFS
답변3
목록을 배열 변수로 설정할 수 있습니다.
#!/bin/bash
col=1,3,4
declare -a colArray=($(echo $col | tr ',' ' '))
echo ${#colArray[@]} # number of elements in the array
echo ${colArray[0]} # first element of the array
for i in $(seq 0 $((${#colArray[@]}-1))) # loop through the array
do
echo ${colArray[$i]}
done
루핑은 다양한 방법으로 수행할 수 있는데, 저는 하나만 선택했습니다. IFS를 망가뜨리는 것보다 훨씬 안전합니다.
답변4
내부 필드 구분 기호(IFS)를 변경하는 것은 시스템 전체 변수이고 많은 응용 프로그램이 기본값을 사용하기 때문에 위험할 수 있습니다. 따라서 수정이 필요할 때마다 원래 값을 저장하고 복원하는 것이 좋습니다.
이전에 제안된 예를 사용하면 다음과 같습니다.
#!/bin/bash
col=1,3,4,
OLD_IFS=$IFS
IFS=","
for i in $col; do
echo "i= $i"
done
IFS=$OLD_IFS