IFS 및 읽기 또는 기타 방법을 사용하여 긴 문자열을 문자열 배열로 분할하는 방법

IFS 및 읽기 또는 기타 방법을 사용하여 긴 문자열을 문자열 배열로 분할하는 방법

git 명령의 출력인 긴 줄이 있습니다 a=$(git submodule foreach git status). 다음과 같습니다: a="enter'디렉토리1/하위 디렉토리' 귀하의 브랜치가 브랜치 마스터에서 "원본/마스터"로 업데이트되었습니다. 커밋할 내용이 없으며 작업 트리 정리 입력'디렉토리 2'HEAD는 xxxxxx에서 분리되어 있어 아무것도 커밋할 필요가 없으며 작업 트리가 깔끔하게 입력되었습니다.'목차 3' 귀하의 브랜치가 브랜치 마스터에서 "원본/마스터"로 업데이트되었습니다. 커밋할 내용이 없으며 작업 트리 정리 입력'목차 4' 귀하의 브랜치가 브랜치 마스터에서 "원본/마스터"로 업데이트되었습니다. 약속할 것도 없고, 직업 트리도 깨끗해”

나는 그것을 배열로 나누고 싶습니다 :

ARR[0] = "'디렉토리1/하위 디렉토리'지부장에 대해서...'

ARR[1] = "'디렉토리 2'머리가 빠졌어...'

등.

이를 위해 기호 대신 "Entering"을 사용해 보았습니다(#$% & \t...를 사용해 보았습니다). a=${a//Entering /$}제대로 작동했습니다. 그런 다음 IFS를 사용하여 배열로 읽어 보려고 합니다.IFS='$' read -ra ARR <<< "$a"

이것이 내가 문제에 직면하는 곳입니다.

내가 얻는 출력 echo ${ARR[@]}은 "Dir1/Subdir1"이므로 읽기가 공백이나 git이 출력하는 방식의 영향을 받는 것 같지만 무슨 일이 일어나고 있는지, 어떻게 해결하는지 이해하지 못합니다. 조언 좀 해주실 수 있나요?

감사해요.

답변1

readarraybash 내장 명령을 사용하고 동일한 명령에 구분 기호를 지정할 수 있습니다.

readarray -d 'char delimiter' array <<< $variable

예를 들어:

readarray -d '@' array <<< ${a//Entering /@}

마지막으로, 각 결과를 인쇄할 때 제거 @하거나 구분 기호로 사용되는 다른 문자를 삭제할 수 있습니다.

echo ${array[1]%@}
echo ${array[2]%@}
echo ${array[@]%@}

인덱스를 제거하려는 경우 0(이 포함되어 있기 때문에 @) 인덱스의 항목을 마지막 인덱스로 복사하여 배열을 재할당할 수 있습니다 1.

array=("${array[@]:1}")

힌트:${array[index]%@}일부 항목을 가져오고 싶을 때마다 배열을 사용 하지 않으려면 @다음을 제거하여 배열을 재할당할 수 있습니다.

array=("${array[@]/@}")

관련 정보