키 값 문자열을 배열 쌍으로 분할하는 방법은 무엇입니까?

키 값 문자열을 배열 쌍으로 분할하는 방법은 무엇입니까?

? 를 사용하여 String다음을 쌍으로 분할하는 방법은 무엇입니까?key-valuebash

SOURCE="'key1=val 1' 'key2=val 2'"

내 출력 목표는 다음과 같습니다

key1=val 1
key2=val 2
  • 변수로 단일 문자열만 입력할 수 있습니다.
  • 변수를 다음과 같이 전달할 수 없습니다.대량으로
  • 키 값 쌍을 있는 그대로 출력하고 싶습니다.
  • 키 값 쌍을 구분하는 방법을 모르기 때문에 따옴표를 존중하고 싶습니다.
  • 내 키에는 공백이 포함되지 않지만 값에는 공백이 포함됩니다.

답변1

형식을 자유롭게 정의할 수 있으므로 SOURCE두 정의 사이에 항상 공백이 있는지 확인할 수 있습니다. 이 경우 시작 부분과 시작 부분의 틱을 제거하고 ' '모든 항목을 줄 바꿈으로 바꿀 수 있습니다.

echo "$SOURCE" | sed "s/^'//;s/'$//;s/' '/"'\
'/g

개행 문자를 인용하려면 큰따옴표에서 작은따옴표로 전환해야 합니다.

이스케이프된 틱의 바운싱도 제거하려면 다음을 수행하십시오.

echo "'key1=foo bar' 'key2=I\'m okay'" | sed "s/^'//;s/'$//;s/' '/"'\
'"/g;s/\\\\'/'/g"

이것을 실패하게 만드는 예는 다음과 같습니다.SOURCE="'key1=foo\' ' 'key2=bar'"

관련 정보