development

bash 쉘에서 하나의 문자열을 여러 변수로 나누는 방법은 무엇입니까?

big-blog 2020. 6. 22. 07:18
반응형

bash 쉘에서 하나의 문자열을 여러 변수로 나누는 방법은 무엇입니까? [복제]


이 질문에는 이미 답변이 있습니다.

나는 해결책을 찾고 비슷한 질문을 찾았으며 문장 사이에 공백으로 문장을 나누려고 시도했지만 대답이 내 상황에 맞지 않습니다.

현재 변수는 다음
ABCDE-123456
같은 문자열로 설정되고 있습니다. " - " 를 제거하면서 변수를 2 개의 변수로 나누고 싶습니다 . 즉 :
var1=ABCDE
var2=123456

이것을 달성하는 방법은 무엇입니까?


이것이 나를 위해 일한 솔루션입니다.
var1=$(echo $STR | cut -f1 -d-)
var2=$(echo $STR | cut -f2 -d-)

구분 기호없이 작동 하는 cut 명령 을 사용할 수 있습니까 (각 문자가 변수로 설정 됨)?

var1=$(echo $STR | cut -f1 -d?)
var2=$(echo $STR | cut -f1 -d?)
var3=$(echo $STR | cut -f1 -d?)
etc.


경우 솔루션 일반 될 필요가 없습니다, 즉 단지 당신이 할 수있는 귀하의 예제와 같은 문자열에 대한 작업에 필요합니다 :

var1=$(echo $STR | cut -f1 -d-)
var2=$(echo $STR | cut -f2 -d-)

cut몇 가지 변수에 대한 코드를 간단히 확장 할 수 있기 때문에 여기에서 선택했습니다 ...


read이것으로 IFS완벽합니다.

$ IFS=- read var1 var2 <<< ABCDE-123456
$ echo "$var1"
ABCDE
$ echo "$var2"
123456

편집하다:

각 개별 문자를 배열 요소로 읽는 방법은 다음과 같습니다.

$ read -a foo <<<"$(echo "ABCDE-123456" | sed 's/./& /g')"

배열을 덤프하십시오.

$ declare -p foo
declare -a foo='([0]="A" [1]="B" [2]="C" [3]="D" [4]="E" [5]="-" [6]="1" [7]="2" [8]="3" [9]="4" [10]="5" [11]="6")'

문자열에 공백이있는 경우 :

$ IFS=$'\v' read -a foo <<<"$(echo "ABCDE 123456" | sed 's/./&\v/g')"
$ declare -p foo
declare -a foo='([0]="A" [1]="B" [2]="C" [3]="D" [4]="E" [5]=" " [6]="1" [7]="2" [8]="3" [9]="4" [10]="5" [11]="6")'

두 개의 필드가 될 것임을 알고 있다면 다음과 같은 추가 하위 프로세스를 건너 뛸 수 있습니다.

var1=${STR%-*}
var2=${STR#*-}

이것은 무엇을 하는가? ${STR%-*}문자열의 끝에서 시작 $STR하여 패턴과 일치 하는 가장 짧은 부분 문자열을 삭제합니다 -*. ${STR#*-}동일한 작업을 수행하지만,와 *-패턴과 문자열의 처음부터 시작. 이들은 각각 대응 하는 부분을 %%가지며 가장 긴 고정 패턴 일치 ##를 찾습니다 . 기억에 도움이되는 기억력이 있다면 누구에게 알려주십시오! 나는 항상 기억하기 위해 둘 다 시도해야합니다.


set사용자 지정 작업과 비슷합니다 IFS.

IFS=-
set $STR
var1=$1
var2=$2

(이 기능을 사용하여 원하는 기능 local IFS을 수행 해야하는 스크립트의 다른 부분을 엉망으로 만들지 않아야합니다 IFS.)


bash 정규식 기능 사용 :

re="^([^-]+)-(.*)$"
[[ "ABCDE-123456" =~ $re ]] && var1="${BASH_REMATCH[1]}" && var2="${BASH_REMATCH[2]}"
echo $var1
echo $var2

산출

ABCDE
123456

string="ABCDE-123456"
IFS=- # use "local IFS=-" inside the function
set $string
echo $1 # >>> ABCDE
echo $2 # >>> 123456

참고URL : https://stackoverflow.com/questions/10520623/how-to-split-one-string-into-multiple-variables-in-bash-shell

반응형