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
특정 문자로 끝나는 파일을 찾으십시오 "
.