배열 및 문자열 검색 명령 사용

배열 및 문자열 검색 명령 사용

이 스크립트가 작동하는 이유는 무엇입니까?

str=( -name "*.conf" -o -name "test test" )
find ./ \( "${str[@]}" \)

그리고 이 스크립트가 작동하지 않나요?

str[0]="-name"
str[1]="\"*.conf\""
str[2]="-o"
str[3]="-name"
str[4]="\"test test\""
find ./ \( "${str[@]}" \)

오류는 다음과 같습니다.str[1]="\"*.conf\""

나는 두 번째 시나리오에 관심이 있다.

답변1

이것:

str=( -name "*.conf" -o -name "test test" )

(보통) 다음과 같습니다.

str=( "-name" "*.conf" "-o" "-name" "test test" )

대부분의 따옴표는 필요하지 않기 때문에 생략됩니다. 파일 이름 확장을 위한 와일드카드가 없으며 기본 IFS에는 이러한 요소에 대한 필드 분할을 유발할 수 있는 공백 문자가 없습니다.

따라서 이에 상응하는 내용은 다음과 같습니다.

declare -a str
str[0]="-name"
str[1]="*.conf"
str[2]="-o"
str[3]="-name"
str[4]="test test"

또는:

declare -a str
str[0]=-name
str[1]=*.conf    # no filename expansion in variable assignment
str[2]=-o
str[3]=-name
str[4]="test test"

관련 정보