찾기 및 변수 관련 문제

찾기 및 변수 관련 문제

나는 다음의 다양한 변형을 시도했지만 아무것도 작동하지 않는 것 같습니다. 기본적으로 find실행되면 아무 일도 일어나지 않는 것 같습니다. 아래에는 bash 함수 코드와 실행 시 출력 결과가 나와 있습니다.

아래 코드에서 어떤 일이 발생하는지, 왜 명령을 명시적으로 입력했을 때처럼 작동하지 않는지 이해하고 싶습니다.

rgrep또한 작업할 일부 상자에 액세스할 수 없다는 말을 들었 으므로 코드 탐색 등에 대한 일반적인 솔루션을 위해 이 접근 방식을 시도합니다.

function findin() {

if [ -z $1 ] ; then

    echo "Usage: findin <file pattern> <<grep arguments>>"
    return 1

fi

fIn[1]=$1

shift
fIn[2]="$@"

echo -- "${fIn[1]}"
echo -- "'${fIn[2]}'"

find -type f -name "'${fIn[1]}'" -print0 | xargs -0 grep --color=auto ${fIn[2]}
}

출력은 다음과 같습니다.

$ ls
Server.tcl  Server.tcl~  test.cfg  vimLearning.txt
$ find -type f -name '*.txt' -print0 | xargs -0 grep --color=auto char
x      deletes char under cursor. NNx deletes NN chars to RHS of cursor.
r      type r and the next char you type will replace the char under the cursor.
$ findin '*.txt' char
-- *.txt
-- 'char'

답변1

아마도 사용하려고 했던 패턴은 이었지만 어떤 파일과도 일치하지 않는 작은따옴표를 포함하여 을 사용하도록 *.txt지시하고 있습니다 . 확장은 다음과 같이 작동합니다.find -name'*.txt'

명령줄에서, 입력할 때

$ find -name '*.txt'

쉘이 보는 '*.txt'것은 인용되어 있으므로 따옴표를 제거하고 내용을 , *.txt에 전달합니다 find.

기능에서,

find -name "'$var'"

$var*.txt. 확장이 큰따옴표 내에서 발생했기 때문에 쉘은 큰따옴표를 제거하고 내용 , '*.txt'을 에 전달합니다 find.

해결책은 간단합니다. 에서 작은따옴표를 제거하면 됩니다 find -name "'$var'".


나는 당신을 위해 당신의 기능을 손봤습니다:

findin () {
    if (( $# < 2 )); then
        >&2 echo "Usage: findin <file pattern> <grep arguments ...>"
        return 1    
    fi               
    pattern=$1               
    shift
    printf '%s\n' "-- ${pattern}"
    printf '%s ' "-- $@"
    echo
    find -type f -name "${pattern}" -print0 | 
            xargs -0 grep --color=auto "$@"
}     

관련 정보