スクリプトがファイル名にスペースを挿入できないようにする

スクリプトがファイル名にスペースを挿入できないようにする

「表」列には、ファイルの絶対パスと名前を格納する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文字)

関連情報