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