bash 쉘에서 하나의 문자열을 여러 변수로 분할하려면 어떻게 해야 합니까?
저는 해결책을 찾고 있었는데, 비슷한 질문을 발견했는데, 단지 그들이 공백으로 문장을 나누려고 시도했을 뿐이고, 제 상황에 맞는 답이 아닙니다.
현재 변수는 다음과 같은 문자열로 설정되어 있습니다.
ABCDE-123456
"-"를 제거하면서 두 개의 변수로 나눕니다.
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.
문자열을 분할하려면-, 를 사용할 수 있습니다.read와 함께IFS:
$ IFS=- read -r var1 var2 <<< ABCDE-123456
$ echo "$var1"
ABCDE
$ echo "$var2"
123456
편집:
각 문자를 배열 요소로 읽는 방법은 다음과 같습니다.
$ read -ra 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 -ra 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#*-}같은 기능을 합니다만,*-string의 선두부터 시작합니다.그들은 각각 상대방이 있다.%%그리고.##가장 긴 고정 패턴의 일치를 검출합니다.어떤 것이 어떤 것인지 기억할 수 있는 유용한 기억력을 가진 사람이 있다면 알려주세요!난 항상 기억하려고 둘 다 노력해야 해.
자세한 내용은 bash 설명서를 참조하십시오.
일반적인 솔루션일 필요가 없는 경우(예시와 같은 문자열만 사용)에는 다음과 같은 작업을 수행할 수 있습니다.
var1=$(echo $STR | cut -f1 -d-)
var2=$(echo $STR | cut -f2 -d-)
나는 선택했다cut몇 가지 변수를 위해 코드를 확장할 수 있기 때문에...
의 일이 될 것 같다.set관례에 따라IFS.
IFS=-
set $STR
var1=$1
var2=$2
(이것은, 다음의 기능을 사용해 실행할 필요가 있습니다.local IFS그래야 대본의 다른 부분을 망치지 않고IFS기대했던 대로입니다.)
bash regex 기능 사용:
re="^([^-]+)-(.*)$"
[[ "ABCDE-123456" =~ $re ]] && var1="${BASH_REMATCH[1]}" && var2="${BASH_REMATCH[2]}"
echo $var1
echo $var2
산출량
ABCDE
123456
언급URL : https://stackoverflow.com/questions/10520623/how-to-split-one-string-into-multiple-variables-in-bash-shell
'programing' 카테고리의 다른 글
| 롤리팝의 최신 Chrome 버전에서 헤더 바와 주소 바의 색상을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
|---|---|
| wpf: 명령에 의해 버튼이 비활성화되었을 때 툴팁을 표시하는 방법 (0) | 2023.04.10 |
| 엔티티 프레임워크 VS LINQ에서 SQL로의 VS ADO.저장 프로시저를 사용하는 NET? (0) | 2023.04.10 |
| Node.js/Windows 오류: ENOENT, stat 'C:\Users\RT\AppData\로밍\npm' (0) | 2023.04.10 |
| 문자열의 일부 문자를 다른 문자로 바꾸기 (0) | 2023.04.10 |