확장을 방지하는 방법

확장을 방지하는 방법

내 마스크는 스크립트 매개변수와 찾기 도구 매개변수로 구성됩니다.

$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[@]}"

관련 정보