내 마스크는 스크립트 매개변수와 찾기 도구 매개변수로 구성됩니다.
$mopt=false
case $1 in
...
-m|--mask-file)
if $mopt; then
or="-o"
fi
mask+=("$or -name $2 ")
mopt=true
shift 2;;
...
find . "${mask[@]}"
=>
+ find . '-name *.cpp -o -name *.txt'
확장은 없지만 모든 매개변수 주위에 아포스트로피가 있기 때문에 실패합니다. $mask에 따옴표가 있으면 확장하세요.
따옴표를 추가하면 찾기 도구에 대한 매개변수를 생성하는 것이 이미 어렵습니다.
$mask+=("$or -name \"$2\" ")
find . {$mask[@]}
=>
+ find . -name '"*.cpp"' -o -name '"*.txt"'
-이름 '' * .cpp '' -o -이름 '"* .txt"'
마스크 주위에 큰따옴표를 사용하여 실행되는 찾기 도구도 실패합니다. 수동으로 스크립트를 작성하는 경우:
find . -name "${mask[0]}" -o -name "${mask[1]}"...
명령은 올바르게 실행되지만 가변 개수의 마스크를 입력할 수 있도록 조회 매개 변수의 이름을 자동으로 만들어야 합니다. 그러면 스택의 순서를 찾아 다음을 입력해야 합니까?
find . $mask ...
답변1
("-o"), "-name", "$2" 등 검색할 매개변수가 2개 또는 3개가 되기를 원하므로 다음과 같습니다.
mopt=false
case $1 in
...
-m|--mask-file)
"$mopt" || mask+=(-o)
mask+=(-name "$2")
mopt=true
shift 2;;
find . "${mask[@]}"