Bash sqlplus删除额外的空白

Bash sqlplus删除额外的空白,bash,oracle,unix,whitespace,sqlplus,Bash,Oracle,Unix,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

我有一个测试以下的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
然而,观察到的输出是

aaaa vvvv cccc

Sqlplus正在从我的输出中去掉额外的空格,我想保留它。

这不是SQL*Plus,而是shell。您需要:

要在字符串或变量中保留空白,请使用

所以不是

echo ${sql_out}
请执行以下任一操作:

echo "${sql_out}"
printf "%s\n" "${sql_out}"
然后输出为:

aaaa  vvvv   cccc

它不是SQL*加上这样做,它是shell。您需要:

要在字符串或变量中保留空白,请使用

所以不是

echo ${sql_out}
请执行以下任一操作:

echo "${sql_out}"
printf "%s\n" "${sql_out}"
然后输出为:

aaaa  vvvv   cccc

不要执行printf${sql\u out}\n-printf的第一个参数是格式说明符:如果变量的值包含%,结果很可能不是您期望的结果。太好了。。。我已经把重点放在了从DUAL中选择“aaaa VVV cccc”+1Don't do printf${sql_out}\n-printf的第一个参数是格式说明符:如果变量的值包含%,结果很可能不是您期望的结果。太好了。。。我已经把重点放在了从DUAL中选择“aaaa VVV cccc”+1.