![Bash 스크립트 내의 변수에 명령 출력을 할당할 수 없습니다.](https://linux55.com/image/116959/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EB%82%B4%EC%9D%98%20%EB%B3%80%EC%88%98%EC%97%90%20%EB%AA%85%EB%A0%B9%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
나는 한동안 개인 bash 스크립트 문제로 어려움을 겪고 있으며 온라인에서 찾은 제안을 사용하여 많은 행운을 얻지 못했습니다. 나는 이 질문이 다른 많은 질문과 거의 동일해 보인다는 것을 알고 있지만, 그 질문을 모두 살펴본 후에도 여전히 기쁨이 없습니다.
내 생각에 가장 좋은 접근 방식은 내가 현재 갖고 있는 것의 목록을 만들고 거기서부터 작업하는 것입니다.
따라서 내 스크립트의 관련 부분은 다음과 같습니다.
#!/bin/bash
SOURCE_FILE="$1"
cat "$SOURCE_FILE" | while read FOLDER
do
...
FOLDER_RULE=$(echo ${FOLDER} | grep -oP '\[.*\]')
FOLDER_NAME=$(echo ${FOLDER} | grep -oP '.+(?=\[.*\]')
# these output absolutely nothing:
echo FOLDER_RULE is "$FOLDER_RULE"
echo FOLDER_NAME is "$FOLDER_NAME"
...
done
참조 $SOURCE_FILE
는 런타임 시 스크립트에 전달하는 문자열 목록이 포함된 간단한 텍스트 파일을 가리킵니다. 이 파일의 일부 더미 데이터는 다음과 같습니다.
Folder One [ALL]
Folder Two [LATEST]
Folder Three [FIRST]
Folder Four
$FOLDER
문제 없이 스크립트에 있는 내용을 에코할 수 있으며 $(echo ... | grep ...)
이 두 줄은 터미널에서 직접 실행할 때 완벽하게 작동하지만 내 bash 파일에서는 아무것도 얻지 못합니다.
grep
다양한 방법으로 명령을 구조화하고, 변수를 ${...}
sums 로 참조하고 "$..."
, echo
캡처하려는 출력이 있는 명령의 출력을 가져오려고 시도했지만 여전히 아무것도 얻지 못했습니다.
제가 뭔가 간단한 것을 놓치고 있다는 것은 확실합니다. 하지만 제가 수행한 검색 중 어느 것도 이 문제를 해결하는 데 도움이 되지 않았습니다. 누군가 내가 여기서 뭘 잘못하고 있는지 이해하도록 도와줄 수 있나요?
답변1
결국 문제는 내 정규식에 있습니다. 그 줄을 긁어내다하다끝에 있는 포함은 [something]
예상대로 변수에 값을 할당하는 반면 끝에 해당 특정 문자열이 없는 줄은 두 변수를 모두 비워 둡니다. 적어도 정규식 측면을 고칠 수 있습니다.
어리석은 질문에 대해 사과드리며, 도움을 주신 댓글 작성자에게 진심으로 감사드립니다. 시간을 내주셔서 정말 감사드립니다. :)