%EC%97%90%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%98%EC%96%B4%20%EC%9E%88%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%ED%95%A8%EC%88%98.png)
저는 쉘 스크립팅의 초보자이고 bash 목록에 변수가 있는지 확인하는 함수를 찾아야 합니다. 목록은 다음과 같이 생성됩니다. FILES=$(ls)
따라서 파일이 존재하는지 확인해야 합니다. -e
두 폴더를 동시에 비교하여 병렬성으로 이상한 작업을 해보고 싶어서 테스트를 사용하지 않았고 설명을 시작하면 너무 길어질 것 같습니다.
이 페이지를 찾았어요 https://stackoverflow.com/questions/8063228/how-do-i-check-if-a-variable-exists-in-a-list-in-bash
$FILES
파일 이름에 공백이 있을 수 있다는 것을 알고 내가 만든 변수가 이 페이지의 항목과 동일한 목록인지 확실하지 않기 때문에 이것이 나에게 편리한지 잘 모르겠습니다 . 제가 알아내려고 했을 때, 검색 엔진은 -ls 명령과 관련이 없는 것을 보여주었습니다.
또한 문제는 해당 페이지에 설명된 함수에서 무슨 일이 일어나고 있는지 이해할 수 없다는 것입니다. 나는 다음과 같은 표현식을 포함하는 함수에 대해 이야기하고 있습니다.
function contains() {
[[ $1 =~ (^|[[:space:]])$2($|[[:space:]]) ]] && exit(0) || exit(1)
}
그것이 무엇을 의미하는지 검색했고 if를 테스트한 것 =~
같지만 이 이상한 내용이 무엇을 의미하는지 전혀 모릅니다 . 검색 엔진에서 찾으려고 하면 NASA 관련 내용이나 이벤트가 표시됩니다. " shell script (^|[[:space:]]) " "space"라는 단어만 고려하고 주변 기호를 완전히 무시하므로 갈 필요가 없는 것을 표시합니다.$a =~ $b
b
a
(^|[[:space:]])
($|[[:space:]])
또한 괄호나 대괄호 없이 "and" 뒤에 "or"가 나오는 이유를 이해할 수 없습니다. 이러한 작업은 연관되어서는 안 되기 때문입니다.
답변1
^|[[:space:]])$2($|[[:space:]]
정규식입니다. 주변의 괄호는 쓸모가 없습니다.
^
문자열의 시작을 표시|
"왼쪽의 패턴 또는 오른쪽의 패턴"을 의미합니다.[[:space:]]
공백과 탭을 포함하는 문자 클래스입니다.$
문자열의 끝을 표시