한 줄만 출력되지만

한 줄만 출력되지만

스크립트를 실행하고 이 출력을 원합니다.

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의 값은 4줄이고 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

관련 정보