파이프로 구분된 키-값 쌍에서 값 가져오기

파이프로 구분된 키-값 쌍에서 값 가져오기

다음과 같은 문자열이 있습니다

Delete :xna.del|mode:Full|Execution: loaded

3개의 매개변수에 출력을 저장해야 합니다. 예를 들어

a=xna.del
b=Full
c=loaded

답변1

zsh대신 를 사용하여 bash결과를 연관 배열에 저장합니다.

$ string='Delete :xna.del|mode:Full|Execution: loaded'
$ IFS=':|'
$ set -o extendedglob
$ typeset -A field=( ${=string//[[:space:]]#:[[:space:]]#/:} )
$ typeset -p field
typeset -A field=( [Delete]=xna.del [Execution]=loaded [mode]=Full )
$ print -r -- $field[mode]
Full

답변2

그럼 ":" 앞의 단어는 당신과 아무 관련이 없는 것 같은데요?

모든 값의 배열을 사용하여 이 솔루션을 사용해 보세요.

#!/usr/bin/env bash
TEXT="Delete :xna.del|mode:Full|Execution: loaded"
MYVAR=( $(tr '|' '\n' <<< "${TEXT}" |cut -d: -f2) )

#Checks on the result
echo MYVAR has "${#MYVAR[@]}" entries
#single-Access
echo "${MYVAR[0]}"
echo "${MYVAR[1]}"
echo "${MYVAR[2]}"
#formated output
printf "\t%s\n" "${MYVAR[@]}"
#iterate again to work with it?
for value in "${MYVAR[@]}"; do echo "$value"; done

관련 정보