Bash 변수를 사용하여 매개변수 세트를 프로그램에 전달

Bash 변수를 사용하여 매개변수 세트를 프로그램에 전달

bash 변수에 중복된 매개변수를 넣어 쉘 스크립트를 정리하려고 합니다.

내가 아는 가장 좋은 방법은 배열에 넣고 전달하는 것입니다. 하지만 작동하지 않는 것 같습니다. 모든 매개변수를 변수에 저장하는 방법은 무엇입니까?

이것은 작동하지 않습니다:

TESTP=( "-path" "\"./var/*\"")
echo ${TESTP[@]}
 # Results in: -path "./var/*"
find ${TESTP[@]}
 # Returns no results.

while은 find -path "./var/*"var 아래의 모든 파일을 반환합니다.

답변1

다음 배열 요소를 인수로 전달하려고 합니다 find.

TESTP=(-path './var/*')
find . "${TESTP[@]}"

아니면 새로 만드세요.껍데기명령줄을 입력하고 쉘에게 이를 해석하도록 요청합니다(및 그 안의 따옴표).

TESTP='-path "./var/*"'
eval "find . $TESTP"

또는 스칼라 변수에 분할+glob 연산자를 사용할 수 있습니다(질문에서 변수를 인용 해제하여 연산자를 부적절하게 사용함).

TESTP='-path,./var/*'

set -f # no glob
IFS=,  # split on ,
find . $TESTP

당신의,

TESTP=( "-path" "\"./var/*\"")
find ${TESTP[@]}

${TESTP[@]}먼저 배열 요소 ( -path및 로 확장되며 이름이 디렉터리로 끝나는 파일 로 확장될 수 있습니다 ."./var/*"$IFS""./var

디렉토리 가 없을 가능성이 높 ".으므로 두 매개변수가 모두 유지되어 에 전달됩니다 find.

find -path '"./var/*"'

즉, 디렉토리에서 "./var특정 문자로 끝나는 파일을 찾으십시오 ".

관련 정보