防止脚本在文件名中插入空格

防止脚本在文件名中插入空格

我有一个 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/shell 脚本相关的机制导致它。我不是 SQL 专家,所以我无能为力,但你有一些 shell/bash 方法可以删除它:

  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 个字母数字符号)

相关内容