Ini adalah kesalahan yang saya dapatkan dan gagal karena variabel yang nilainya seharusnya 2 (saya mendapatkan ini menggunakan a select * from tabel
). Saya mendapatkan spasi dalam variabel itu.
+ 0 !=
2
./setjobs[19]: 0: not found.
Bagaimana cara menghapus semua spasi atau baris baru dari variabel itu? Bisakah tr
,, sed
atau apa pun membantu?
Ini yang saya lakukan:
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)
Ini berfungsi seperti yang disarankan:
| sed 's/[[:space:]]//g'
Tapi saya masih mendapatkan nilai seperti:
set_jobs_count=
2
| sed 's/[[:space:]]//g'
untuk meruntuhkan spasi putihset_jobs_count= 2
Jawaban:
Anda dapat menggunakan
tr
, seperti padatr -d '\040\011\012\015'
, yang akan menghapus spasi, tab, pengembalian carriage, dan baris baru.sumber
\040\011\012\015
lebih dari itu[:space:]
?%
karakter di akhir output? Kira itu semacam cara Linux mengatakan kepada saya bahwa output berhenti di sana?Dalam ksh, bash, atau zsh:
Dalam shell apa pun, Anda dapat menghapus spasi putih terkemuka dan tertinggal dan menormalkan semua spasi putih menengah ke ruang tunggal seperti ini:
set +f
mematikan globbing; jika Anda tahu bahwa data tidak mengandung karakter apa pun\[?*
, Anda dapat menghilangkannya.sumber
set -- $set_jobs_count
.set_jobs_count=$*
setara denganset_jobs_count="$@"
karena$*
dan$@
hanya setara ketika tidak dikutip dan sisi kanan penugasan diuraikan dengan cara yang sama dengan string yang dikutip ganda.