>

헤더와 본문이라는 두 개의 문자열 인수가있는 함수 (notify_dba)가 있습니다. (수정)cron에서는 셸 프롬프트에서 제대로 작동하지만Err은 셸 또는 cron에서 작동하지 않습니다 (그러나 ...?) :

53 notify_dba "${FRIENDLY_SERVER_NAME}: New ORA errors in AlertLog" echo ${
 54 "Please check full log in ${ALERT_LOG_LOCATION}.
 55 =====================================================
 56 `grep -A900000 "${LAST_LINE_FROM_ARCHIVE}:" ${TEMPORARY_LOG_WITH_ORA_ERRORS} | grep -v "${LAST_LINE_FROM_ARCHIVE}:"`
 57 =====================================================
 58 "}

오류가 발생했습니다 :

Wed Jan 16 06:00:01 PST 2019
LAST_LINE_FROM_ARCHIVE=449843
LAST_LINE_FROM_TEMP= 452866
/u01/app/oracle/admin/chk_alertlog.sh: line 53: ${
"Please check full log in ${ALERT_LOG_LOCATION}.
=====================================================
`grep -A900000 "${LAST_LINE_FROM_ARCHIVE}:" ${TEMPORARY_LOG_WITH_ORA_ERRORS} | grep -v "${LAST_LINE_FROM_ARCHIVE}:"`
=====================================================
"}: bad substitution

  • 답변 # 1

    질문에 대한 의견에서 지적한 것처럼 오류는 인용되지 않은 ${ 때문입니다 매개 변수 확장을 트리거합니다 ( man bash 의 "EXPANSION"섹션에있는 "매개 변수 확장"참조) ).

    즉, 여러 줄의 텍스트 블록을 전달할 수 있습니다. 올바르게 인용하면됩니다 :

    정적이면 작은 따옴표는 괜찮습니다 :

    $ mlblock='line 1
    > line 2'
    $ printf '%s\n' "$mlblock"
    line 1
    line 2
    
    

    실행 시간에 빌드하려면 $ 의 특별한 의미를 유지하는 큰 따옴표를 사용해야합니다. `  그리고 \ , 매개 변수 확장 및 명령 대체를 허용 :

    $ text="Sample    text"
    $ mlblock="$text
    > date: $(date)
    > end"
    $ printf '%s\n' "$mlblock"
    Sample    text
    date: Wed Jan 16 22:18:33 CET 2019
    end
    
    

    큰 따옴표로 묶인 문자열의 어느 곳에 나 나타나는 확장은 그 자체로 인용됩니다. 따라서 간격이 유지됩니다 (예 : Sample text ).

    복잡한 문자열을 함수에 전달하는 가장 읽기 쉬운 방법은 아마도 변수를 사용하는 것입니다 :

    $ function notify_dba () {
        printf '%s\n' "$1"    # Print header
        printf '%s\n' "$2"    # Print body
    }
    $ notify_dba 'Header' "$mlblock" 
    Header
    Sample    text
    date: Wed Jan 16 22:21:14 CET 2019
    end
    
    

    두 번째 인자는 다음과 같은 이유로 큰 따옴표로 표시해야합니다. 1) 인용 부호가 없으면 셸에 의해 확장되고 둘 이상의 단어가 생성되면둘 이상의 인수로 번역됩니다;2) 작은 따옴표로 묶으면 문자 그대로 문자열 $mlblock 로 해석됩니다. .

    대신 함수를 호출 할 때 인수 문자열을 만들 수도 있습니다 :

    $ notify_dba 'Header' "Multi
    > line body
    > date: $(date)
    > end"
    Header
    Multi
    line body
    date: Wed Jan 16 22:29:13 CET 2019
    end
    
    

  • 이전 남자는 작동하지 않습니다 (너무 많은 주장)
  • 다음 ubuntu - iptables 구성을 영구적으로 저장