如何删除echo中的空格?

时间:2011-04-01 06:02:41

标签: shell sed

s#!/bin/ksh

usrid=`sql_login.sh`

if [ "$?" -ne "0" ]; then

   echo "sql login failed-Username/Password not available in control file"

   exit -1

fi

a=`sqlplus -s ${usrid} <<EOF

set pause    off

set heading  off

set feedback off

set serveroutput off;

select 10 from dual;

exit;

EOF`

b=`sqlplus -s ${usrid} <<EOF

set pause    off

set heading  off

set feedback off

select 11 from dual;

exit;

EOF`

echo "Out of sqlplus session";

echo $a$b;

你的输出如10 11?我需要它1011我怎么能得到这个?

溶液:

a1 = $(echo $ {a#});

b1 = $(echo $ {b#});

C1 = $ A1 $ B1;

echo $ c1;

2 个答案:

答案 0 :(得分:0)

你可以尝试

c="$a$b"
echo ${c// }

或删除每个变量本身的空格

a=${a// } 
b=${b// } 

或者你可以打电话给外部人员

echo $a | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//'

答案 1 :(得分:0)

a的值必须包含空格(也可能是b)

您可以通过修改变量的值来摆脱空间。 假设你有bash,ksh或其他POSIX shell

echo ${a% }${b% }

可能会奏效。 $ {var%}表示,对于$ {var},从变量值的左边删除一个空格char(如果有一个空格char)。 如果由于某种原因,您发现空间位于前面,如“a”,则使用 $ {a#},表示从变量值的右侧删除空格char。

编辑:kurumi的解决方案(假设bash和POSIX shell可能更好) 因为那时空间值出现在哪一行并不重要。

但为什么不连接这两个值并且只有1个sql查询?

$ AB = ... select 10 + 11 from dual;

您可能需要咨询oracle朋友才能完全正确,但在SQL Sybase DB(可能还有MS SQL)中,这不会有问题。

另外,停止使用反引号,自1992年以来它们已被弃用(至少) ab = $(cmd)非常好; - )

我希望这会有所帮助。

P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,或者给它一个+(或 - )作为有用的答案