我执行脚本,我想要这个输出
SENTENCIA : select 1 from dual;
LA CONEXION ES : usu/clave@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1525))(CONNECT_DATA=(SERVICE_NAME=bd)))
代码
declare -a arr=("usu<>clave<>host<>1525<>bd")
D="<>" #Delimitador
# Indica el separador (en este caso ninguno) si no se pone la variable sentencia la parte en trozos
IFS=
export sentencia="select 1 from dual;"
for maquina in "${arr[@]}";
do
# Separa los campos en variables
sList=($(echo $maquina | sed -e 's/'"$D"'/\n/g' | while read line; do echo $line | sed 's/[\t ]/'"$D"'/g'; done))
for (( i = 0; i < ${#sList[@]}; i++ )); do
sList[i]=$(echo ${sList[i]} | sed 's/'"$D"'/ /')
done
printf "SENTENCIA : %s \n" $sentencia;
# Sustituye los valores dentro de la cadena de conexión
cadena_conexion=`echo "${sList[0]}/${sList[1]}@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=${sList[2]})(PORT=${sList[3]}))(CONNECT_DATA=(SERVICE_NAME=${sList[4]})))"`
printf "LA CONEXION ES : %s \n" $cadena_conexion;
done
但当我使用 FS= 或不使用时,我会获得此输出。
-- WITH FS=
$ sh ejecutar_sqlplus_remoto.sh
SENTENCIA : select 1 from dual;
LA CONEXION ES : usu
clave
host
1525
bd/@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SERVICE_NAME=)))
-- WITHOUT FS=
$ sh ejecutar_sqlplus_remoto.sh
SENTENCIA : select
SENTENCIA : 1
SENTENCIA : from
SENTENCIA : dual;
LA CONEXION ES : usu/clave@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1525))(CONNECT_DATA=(SERVICE_NAME=bd)))
我的问题是我使用“FS =”,然后当我显示sentencia的值时,它出现在1行中,但cadena_conexion显示在4行中。如果我注释“FS=”行,我会得到相反的结果,即 Sentencia 的值在四行中,而 cadena_conexion 的值在一行中。我想仅在一行中显示这两个变量。我不想删除行中的任何一个变量。我希望这次我已经解释得很好了。
谢谢,
答案1
尝试
printf "SENTENCIA : %s \n" "$sentencia"
带引号。
使用时不带引号
printf "SENTENCIA : %s \n" $sentencia;
被替换为(我省略了;
)
printf "SENTENCIA : %s \n" select 1 from dual
因为只有一种打印模式(例如 %s) printf 被多次调用。
printf "SENTENCIA : %s \n" select
printf "SENTENCIA : %s \n" 1
printf "SENTENCIA : %s \n" from
printf "SENTENCIA : %s \n" dual