「表」列には、ファイルの絶対パスと名前を格納する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の専門家ではないので、私ができることは何もありませんが、それを削除するためのいくつかのシェル/配布方法があります:
- パラメータ拡張
次のようにパラメータを呼び出すと、すべてのスペースが削除されます。"${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// /}"
- 使用
tr
tr
以下を使用してスペースを削除できます。
ATTACH_FILE=$(echo "$ATTACH_FILE" | tr -d ' ')
- 使用
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文字)