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

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

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

おすすめ記事