bash 쉘에서 하나의 문자열을 여러 변수로 나누는 방법은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
- Bash에서 구분 기호로 문자열을 어떻게 분할합니까? 답변 33 개
나는 해결책을 찾고 비슷한 질문을 찾았으며 문장 사이에 공백으로 문장을 나누려고 시도했지만 대답이 내 상황에 맞지 않습니다.
현재 변수는 다음
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
'development' 카테고리의 다른 글
jquery, 도메인, URL 얻기 (0) | 2020.06.22 |
---|---|
방향 변경을 감지하는 방법? (0) | 2020.06.22 |
Django 모델에서 숫자 필드의 최대 값을 제한하는 방법은 무엇입니까? (0) | 2020.06.22 |
HTTP 처리기 대 HTTP 모듈 (0) | 2020.06.22 |
PHP에서 HTML / XML을 어떻게 파싱하고 처리합니까? (0) | 2020.06.22 |