Я могу решить эту проблему, но не понимаю, почему это происходит.
Моя задача: (в ksh)
Это часть моего кода:
psnr() {
sqlplus -s USR/PASS@PROD << EOS
SET PAGESIZE 0
SET COLSEP ";"
SET FEEDBACK OFF
SET TRIMOUT ON
SET TRIMSPOOL ON
select max_number-last_number from postalslip
where state = 'OPEN'
/
exit
/
EOS
}
Когда я вызываю эту функцию, я получил номер 1234567.
PSNR=$(psnr)
Я пишу слово для письма:
echo "Today's result is: $PSNR" > $MAILTMP
если я хочу использовать эту переменную MAILTMP , я должен использовать tr -d '\ 040 \ 011'
то, что я нашел здесь , в stackexchange, потому что результат без tr будет следующим:
od -c mailtmp.17872.txt
0000000 T o d a y ' s r e s u l t i
0000020 s : \t 1 2 3 4 5
0000040 6 7 \n
0000043
Эта вкладка '\ t' - это то, чего я не понимаю: откуда она взялась, из sqlplus? Возможно специфика БД? (Я проверил в TOAD, оба столбца имеют номер (18). Может быть, у функции в ksh есть какие-то особенности?
sqlplus <<'EOF' | perl -pe 's/\t//g'
Some queries here
EOF
Это при условии, что пробел является вкладкой. Мои запросы sqlplus выводят только space
и в формате csv, поэтому я использую это для удаления ненужного пробела
echo 'foo bar ,baz ,foobar ' | perl -pe 's/ +,/,/g ; s/ +$//g'
foo bar,baz,foobar