C'est l'erreur que j'obtiens et elle échoue à cause d'une variable dont la valeur est supposée être 2 (j'obtiens ceci en utilisant a select * from tabel
). J'obtiens des espaces dans cette variable.
+ 0 !=
2
./setjobs[19]: 0: not found.
Comment supprimer tous ces espaces ou une nouvelle ligne de cette variable? Est tr
-ce que sed
, ou quelque chose peut aider?
Voici ce que je fais:
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)
Cela fonctionne comme suggéré:
| sed 's/[[:space:]]//g'
Mais j'obtiens toujours une valeur comme:
set_jobs_count=
2
| sed 's/[[:space:]]//g'
pour effacer les espaces blancsset_jobs_count= 2
Réponses:
Vous pouvez utiliser
tr
, comme danstr -d '\040\011\012\015'
, qui supprimera les espaces, les tabulations, les retours chariot et les retours à la ligne.la source
\040\011\012\015
plus[:space:]
?%
personnage à la fin de la sortie? Je suppose que c'est une sorte de façon Linux de me dire que la sortie s'arrête là?En ksh, bash ou zsh:
Dans n'importe quel shell, vous pouvez supprimer les espaces blancs de début et de fin et normaliser tous les espaces blancs intermédiaires en un seul espace comme celui-ci:
set +f
désactive la globulation; si vous savez que les données ne contiennent aucun des caractères\[?*
, vous pouvez les omettre.la source
set -- $set_jobs_count
.set_jobs_count=$*
est équivalent àset_jobs_count="$@"
puisque$*
et$@
ne sont équivalents que lorsqu'ils ne sont pas entre guillemets et le côté droit d'une affectation est analysé de la même manière qu'une chaîne entre guillemets doubles.