To jest błąd, który otrzymuję i nie działa z powodu zmiennej, której wartość powinna wynosić 2 (otrzymuję to za pomocą a select * from tabel
). Dostaję spacje w tej zmiennej.
+ 0 !=
2
./setjobs[19]: 0: not found.
Jak usunąć wszystkie te spacje lub znak nowej linii z tej zmiennej? Can tr
, sed
lub pomaga w cokolwiek?
To co robię:
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)
Działa to zgodnie z sugestią:
| sed 's/[[:space:]]//g'
Ale nadal otrzymuję wartość taką jak:
set_jobs_count=
2
| sed 's/[[:space:]]//g'
zwija białe znakiset_jobs_count= 2
Odpowiedzi:
Możesz użyć
tr
, jak wtr -d '\040\011\012\015'
, aby usunąć spacje, tabulatory, znaki powrotu karetki i znaki nowej linii.źródło
\040\011\012\015
ponad[:space:]
?%
postacią na końcu wyjścia? Zgadujesz, że to jakiś sposób na Linuxa, żeby powiedzieć, że wyjście się tam kończy?W ksh, bash lub zsh:
W dowolnej powłoce możesz usunąć wiodące i końcowe białe spacje i znormalizować wszystkie pośrednie białe spacje do jednej spacji, tak jak to:
set +f
wyłącza globbing; jeśli wiesz, że dane nie zawierają żadnego ze znaków\[?*
, możesz je pominąć.źródło
set -- $set_jobs_count
.set_jobs_count=$*
jest równoważneset_jobs_count="$@"
od tamtej pory$*
i$@
są równoważne tylko wtedy, gdy niecytowany, a prawa strona przypisania jest analizowana w taki sam sposób jak ciąg cudzysłowu.