변수가 큰따옴표로 묶여 있어도 공백으로 나타납니다.

변수가 큰따옴표로 묶여 있어도 공백으로 나타납니다.

간단한 질문이 있는데 제가 직접 답변할 수는 없습니다. 아래에 결과를 인쇄한 후 공백으로 표시되는 변수가 있습니다.

스크립트:

core_out=find coretst.*
echo "$core_out"
Result: No display *blank*
#tried to echo without double quotes as well but it has the same result

그런데 저는 퍼티를 사용하고 있습니다.

실제 목표: 1. /opt/datintdv/Informatica/9.6.1/server/bin --dir1에서 core.*를 확인합니다. - core.*가 존재하고 1보다 큰 경우 1개의 core.*를 가져온 다음 문자열을 실행합니다(core. . * )| grep "pmdtm(" --script1 script1이 작동하지 않으면 실행 파일(코어 파일 이름) 인수에 출력을 저장합니다. 전체 코어까지.실행된 후 출력이 변수에 저장됩니다. - dir1에 core.*가 없는 경우 /opt/datintdv/Informatica/9.6.1/tomcat/bin을 확인하십시오. core.*가 존재하고 1보다 큰 경우 1개의 core.*를 가져온 다음 문자열(core.*)을 실행하십시오. ) | grep "pmdtm(" --script1 script1이 작동하지 않으면 실행 파일(코어 파일 이름)에 대한 인수에 출력을 저장합니다. 전체 코어까지.실행된 후 출력이 변수에 저장됩니다. *개행 문자로 구분된 출력

  1. 모든 출력을 가져와 이메일 본문에 연결합니다.
  2. 이메일을 통해 사용자에게 보냅니다. *현재 스크립트를 작성 중인데 처음이라 어렵네요.

당신이 나를 도울 수 있기를 바랍니다! 감사해요!

답변1

명령의 결과를 인라인으로 사용하는 것을 의미하는 명령 대체는 를 통해 수행됩니다 $( ... ).

당신에 관한 한,

core_out=$( find coretst.* )

그러나 이렇게 하면 으로 시작하는 모든 경로가 확장되는 모든 경로 find로 시작하는 모든 경로를 찾으라는 메시지가 표시됩니다. coretst.*나는 당신이하고 싶은 것이 현재 디렉토리 또는 그 아래 디렉토리를 찾는 것이라고 가정합니다.문서패턴을 일치시킵니다 coretst.*. 당신은 이것을 할 것입니다

core_out=$( find . -type f -name 'coretst.*' )

패턴 을 인용하면 coretst.*쉘이 패턴을 현재 디렉토리의 이름으로 확장하는 것을 방지합니다.

그러면 문제는 이것이 반환한 경로 이름으로 무엇을 하려는가 하는 것입니다. 그냥 인쇄하고 싶다면 변수가 전혀 필요하지 않습니다.

find . -type f -name 'coretst.*'

당신이 할 의향이 있다면제거하다파일이 있는 경우 다음에서 이 작업을 수행해야 합니다 find.

find . -type f -name 'coretst.*' -exec rm {} +

파일에 대한 다른 작업도 내에서 수행할 수 있습니다 find.

질문 참조 "찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?find반환된 경로를 사용하는 것이 나쁜 습관일 수 있는 이유(대답은 루프의 결과에 관한 것입니다 find. 내 생각에 이는 나중에 수행하고 싶을 수도 있습니다).


댓글에서:

현재 폴더에서 검색하고 싶고 해당 출력은 하위 문자열에 대한 것이므로 이에 사용됩니다.strings ($core_out) | grep "pmdtm("

내가 올바르게 이해했다면 이것은 다음을 통해 작동합니다.

find . -type f -name 'coretst.*' -exec strings {} + | grep -F 'pmdtm('

즉, strings발견된 모든 파일을 실행하고 strings가 포함된 행을 찾으십시오 pmdtm(.

어떤 파일에서 일치 항목이 발견되었는지 알고 싶다면 다음을 수행하세요.

find . -type f -name 'coretst.*' -exec sh -c '
    for name; do
        if strings "$name" | grep -qF "pmdtm("; then
            printf "%s\n" "$name"
        fi
    done' find-sh {} +

관련 정보