변수를 수정하는 방법

변수를 수정하는 방법

다음과 같은 변수가 있습니다.

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

관련 정보