it-swarm-eu.dev

Odebíráte z proměnné všechny mezery, karty, řádky atd.?

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
30
munish

Můžete použít tr, jako v tr -d '\040\011\012\015', které odstraní mezery, karty, návraty vozíku a nové řádky.

41
Kyle Jones

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.