Este es el error que obtengo y falla debido a una variable cuyo valor se supone que es 2 (obtengo esto usando a select * from tabel
). Estoy obteniendo espacios en esa variable.
+ 0 !=
2
./setjobs[19]: 0: not found.
¿Cómo elimino todos esos espacios o una nueva línea de esa variable? ¿Puede tr
, sed
o algo ayudar?
Esto es lo que estoy haciendo:
set_jobs_count=$(echo "set heading off;
select count(*) from oppar_db
where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \
sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME)
Esto funciona como se sugiere:
| sed 's/[[:space:]]//g'
Pero todavía obtengo un valor como:
set_jobs_count=
2
| sed 's/[[:space:]]//g'
colapsar espacios en blancoset_jobs_count= 2
Respuestas:
Puede usar
tr
, como entr -d '\040\011\012\015'
, que eliminará espacios, pestañas, retornos de carro y líneas nuevas.fuente
\040\011\012\015
más[:space:]
?%
personaje al final de la salida? Supongo que es una forma de Linux de decirme que la salida se detiene allí.En ksh, bash o zsh:
En cualquier shell, puede eliminar espacios en blanco iniciales y finales y normalizar todos los espacios en blanco intermedios en un solo espacio como este:
set +f
apaga el engorde; Si sabe que los datos no contienen ninguno de los caracteres\[?*
, puede omitirlos.fuente
set -- $set_jobs_count
.set_jobs_count=$*
es equivalente aset_jobs_count="$@"
desde$*
y$@
solo son equivalentes cuando no están entre comillas y el lado derecho de una asignación se analiza de la misma manera que una cadena entre comillas dobles.