Toto je chyba, kterou dostávám a selhává kvůli proměnné, jejíž hodnota má být 2 (dostávám to pomocí select * from tabel
). V této proměnné dostávám mezery.
+ 0 !=
2
./setjobs[19]: 0: not found.
Jak z této proměnné odstraním všechny tyto mezery nebo nový řádek? Může tr
, sed
, nebo cokoli pomoci?
To, co dělám:
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)
Funguje to podle doporučení:
| sed 's/[[:space:]]//g'
Ale stále získávám hodnotu jako:
set_jobs_count=
2
Můžete použít tr
, jako v tr -d '\040\011\012\015'
, které odstraní mezery, karty, návraty vozíku a nové řádky.
V ksh, bash nebo zsh:
set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}
V kterémkoli prostředí Shell můžete odstranit úvodní a koncové mezery a normalizovat všechny mezilehlé mezery do jediného prostoru, jako je tento:
set +f
set -- $set_jobs_count
set_jobs_count=$*
set -f
set +f
vypíná globlování; pokud víte, že data neobsahují žádný ze znaků \[?*
, můžete to vynechat.