web-dev-qa-db-ja.com

変数からすべてのスペース、タブ、改行などを削除しますか?

これは私が取得しているエラーで、値が2であるはずの変数が原因で失敗しています(select * from tabelを使用して取得しています)。その変数にスペースが入っています。

+ 0 != 
         2
./setjobs[19]: 0:  not found.

その変数からすべてのスペースまたは改行を削除するにはどうすればよいですか? trsed、または何かお手伝いできますか?

これは私がやっていることです:

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)

これは提案通りに機能します:

| sed 's/[[:space:]]//g'

しかし、私はまだ次のような値を取得しています:

  set_jobs_count=
  2
30
munish

tr -d '\040\011\012\015'のようにtrを使用できます。これにより、スペース、タブ、キャリッジリターン、改行が削除されます。

41
Kyle Jones

Ksh、bash、またはzshの場合:

set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}

どのシェルでも、次のように先頭と末尾の空白を削除し、すべての中間の空白を単一のスペースに正規化できます。

set +f
set -- $set_jobs_count
set_jobs_count=$*
set -f

set +fはグロビングをオフにします。データに\[?*という文字が含まれていないことがわかっている場合は、省略できます。