Dies ist der Fehler, den ich erhalte und der aufgrund einer Variablen fehlschlägt, deren Wert 2 sein soll (ich erhalte dies mit a select * from tabel
). Ich erhalte Leerzeichen in dieser Variablen.
+ 0 !=
2
./setjobs[19]: 0: not found.
Wie entferne ich alle diese Leerzeichen oder Zeilenumbrüche aus dieser Variablen? Kann tr
, sed
oder irgendetwas helfen?
Das mache ich:
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)
Dies funktioniert wie vorgeschlagen:
| sed 's/[[:space:]]//g'
Aber ich erhalte immer noch einen Wert wie:
set_jobs_count=
2
| sed 's/[[:space:]]//g'
,set_jobs_count= 2
Antworten:
Sie können
tr
wie in verwendentr -d '\040\011\012\015'
, um Leerzeichen, Tabulatoren, Zeilenumbrüche und Zeilenumbrüche zu entfernen.quelle
\040\011\012\015
gegenüber[:space:]
?%
Zeichen am Ende der Ausgabe? Schätze, es ist eine Art Linux-Art, mir mitzuteilen, dass die Ausgabe dort stoppt?In ksh, bash oder zsh:
In jeder Shell können Sie führende und nachfolgende Leerzeichen entfernen und alle dazwischen liegenden Leerzeichen auf ein einzelnes Leerzeichen normalisieren:
set +f
Deaktiviert das Globbing. Wenn Sie wissen, dass die Daten keines der Zeichen enthalten\[?*
, können Sie es weglassen.quelle
set -- $set_jobs_count
.set_jobs_count=$*
ist äquivalent zuset_jobs_count="$@"
since$*
und$@
ist nur äquivalent, wenn keine Anführungszeichen vorhanden sind und die rechte Seite einer Zuweisung wie eine Zeichenfolge in doppelten Anführungszeichen analysiert wird.