기본적으로 예를 들어 문자열 구분 기호를 사용하여 문자열을 배열로 분할하고 싶습니다 sep.
. , 등과 bash
같은 도구를 사용하지 않고 이 작업을 수행하는 기본 방법이 있습니까 ? 설정 및 사용을 통해 문자열을 배열로 분할할 수 있다는 것을 알고 있지만 문자열 구분 기호로는 작동하지 않습니다. 그리고 , 등과 같은 도구를 사용하여 어떻게 할 수 없다면 ?sed
awk
IFS
read -ra
sed
awk
문자열이 있고 이를 와 This is some sep.string
2개의 요소가 있는 배열로 분할하고 싶다고 가정해 보겠습니다 .This is some
string
답변1
매개변수 확장을 사용하여 변수를 수동으로 반복할 수 있습니다.
#!/bin/bash
var='This is some sep.string
with
newlines
sep.another line'
a=()
while [[ $var =~ sep\. ]]
do
e=${var%%sep.*}
a+=("${e}")
var=${var#${e}sep.}
done
a+=("${var}")
이는 변수를 반복하여(프로세스에서 업데이트) 첫 번째 구분 기호를 앞으로 제거합니다( %%
가장 긴 일치 항목을 찾으므로 문자열 끝에서 의 첫 번째 인스턴스까지 뒤로 추적됩니다 sep.
). 나머지 부분을 배열에 추가한 다음 나머지 부분과 변수 앞부분의 구분 기호를 제거합니다. 변수에 더 이상 구분 기호가 포함되지 않을 때까지 반복한 다음 나머지를 배열에 추가합니다.
답변2
매개변수 확장과 readarray를 모두 사용하여 이를 수행하는 일종의 기본 방법입니다.
string='This is some sep.string'
mapfile -t array < <( echo "${string//sep./$'\n'}" )
${string//sep./$'\n'}
sep.
- 의 발생을 개행 문자로 대체합니다 . mapfile
/는 readarray
자신의 요소에 각 줄이 포함된 배열을 만듭니다.