sqlplus删除额外的空格

pun*_*eet 1 unix oracle bash whitespace sqlplus

我有一个下面的测试ksh文件

#!/bin/ksh
(
sqlplus -s << EOF
    ${DATABASE}
    SET SERVEROUTPUT ON;
    SET HEAD OFF
    SET FEED OFF
    SET DEFINE OFF
    SET PAGES 0
    SET COLSEP ";"
    WHENEVER SQLERROR EXIT SQL.SQLCODE      
    SELECT 'aaaa  vvvv   cccc'  FROM DUAL;          
    EXIT
EOF
) | while read sql_out
    do
        echo ${sql_out} 
    done
Run Code Online (Sandbox Code Playgroud)

预期的产出是

aaaa  vvvv   cccc
Run Code Online (Sandbox Code Playgroud)

但观察到的输出是

aaaa vvvv cccc
Run Code Online (Sandbox Code Playgroud)

Sqlplus正在从我的输出中删除额外的空格,我想保留它.

Ale*_*ole 5

这不是SQL*Plus,它是shell.您需要将变量括在引号中:

要保留字符串或变量中的空格,请使用引号.

而不是

echo ${sql_out}
Run Code Online (Sandbox Code Playgroud)

做其中任何一个:

echo "${sql_out}"
printf "%s\n" "${sql_out}"
Run Code Online (Sandbox Code Playgroud)

然后输出将是:

aaaa  vvvv   cccc
Run Code Online (Sandbox Code Playgroud)

  • 不要做`printf"$ {sql_out} \n"` - printf的第一个参数是格式说明符:如果变量的值包含'%`,结果很可能不是你所期望的. (2认同)