스크립트가 파일 이름에 공백을 삽입하지 못하도록 방지

스크립트가 파일 이름에 공백을 삽입하지 못하도록 방지

테이블 열에 파일의 전체 경로와 이름을 저장하는 Oracle 데이터베이스 테이블이 있습니다. SQL 클라이언트에서는 다음을 실행할 수 있습니다.

select file_name from table where request_id=12345

나는 다음과 같은 결과를 얻을 것이다:

/home/example_path/example_file_name_1.xls

Bash 스크립트에는 다음과 같은 명령문이 있습니다(대부분 제가 사용하고 있는 다른 예제에서 복사했습니다):

# Get Actual Output File Name
VREQID=12345
ATTACH_FILE=$(sqlplus -s $ORA_USER_PSSWD <<-EOQ3
set heading off 
set feedback off 
set pagesize 0 
set sqlprompt "" 
set verify off 
set pause off
select file_name from table where request_id=($VREQID)
/
EOQ3
)
echo 'ATTACH_FILE: ' "$ATTACH_FILE"
# Script continues...

그런 다음 내 echo 문은 다음과 같습니다.

/home/example_path/example_file_name_ 1.xls

밑줄과 1 사이에 공백이 있습니다. 이를 방지하기 위해 따옴표를 사용해 보았지만 도움이 되지 않았습니다.

이러한 현상이 발생하는 이유는 무엇이며 이러한 현상이 발생하지 않도록 방지하는 방법은 무엇입니까?

답변1

SQL 쿼리와 관련하여 해당 공간이 발생하는 것 같습니다. 원인이 되는 bash/셸 스크립트 관련 메커니즘이 표시되지 않기 때문입니다. 저는 SQL 전문가가 아니기 때문에 제가 할 수 있는 일은 없지만, 이를 제거할 수 있는 몇 가지 쉘/배시 방법이 있습니다:

  1. 매개변수 확장
    다음과 같이 매개변수를 호출하면 모든 공백이 제거됩니다. "${ATTACH_FILE// /}"
$ ATTACH_FILE='/home/example_path/example_file_name_ 1.xls'
$ echo "${ATTACH_FILE// /}"
/home/example_path/example_file_name_1.xls 
ATTACH_FILE="${ATTACH_FILE// /}"
  1. 사용tr
    tr다음을 사용하여 공백을 제거 할 수 있습니다 .
ATTACH_FILE=$(echo "$ATTACH_FILE" | tr -d ' ')
  1. 사용sed
    sed다음을 사용하여 공백을 제거 할 수도 있습니다 .
ATTACH_FILE=$(echo "$ATTACH_FILE" | sed 's/ //g')

답변2

@RomeoNinov의 의견에 따르면 라인 크기 문제입니다. 대답은 추가하는 것입니다

 linesize 300 

sqlplus 쿼리를 실행하기 전에.

답변3

문자열/단어 줄 바꿈을 방지하려면 출력 너비를 큰 값(예: 300개 기호)으로 설정할 수 있습니다.

set linesize 300

또한 특정 열에 대해 특정 형식을 정의할 수 있습니다. 예를 들면 다음과 같습니다.

column file_name format a50

(영숫자 50자)

관련 정보