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
readarray
bash 내장 명령을 사용하고 동일한 명령에 구분 기호를 지정할 수 있습니다.
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[@]/@}")