? 를 사용하여 String
다음을 쌍으로 분할하는 방법은 무엇입니까?key-value
bash
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'"