기본적으로 문자열을 문자열 구분 기호(예 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
각 행에 자체 요소가 있는 배열을 만듭니다.