Как сохранить пробелы в скрипте KornShell при использовании обратных галочек? - PullRequest
3 голосов
/ 06 марта 2012

Я работаю над сценарием в KornShell (ksh).Моя база данных подключается через SQLPLUS к базе данных Oracle 9i.У меня не было проблем с получением значений DB в переменные оболочки, за исключением того, что любой последовательный пробел автоматически усекается до одного символа.

Вот пример моего кода:

MY_VAR=`sqlplus -s usr/pass@db << !
set heading off;
set pagesize 0;

select a_value from a_table where an_index = 25;
!`

Фактические данные в базе данных выглядят так:

Dec 15 09:19:10 <24:0070> User record (5    XATY       41839FG8   58775HK9AFF) is invalid for this condition

Мой пример кода выше возвращает это так:

Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition

Интервал является критическим для того, с чем я работаю.

Заранее благодарю за помощь.

1 Ответ

5 голосов
/ 06 марта 2012

Во-первых, не используйте обратные пометки, они устарели за «Новый язык программирования Kornshell», опубликованный в 1995 году!Вместо этого используйте простую в использовании версию подстановки команд: $( yourCmd goes here).

. Вы не показываете, как вы используете свою переменную $ MY_VAR.Если вы говорите

echo $MY_VAR > outputFile

Вам необходимо заключить переменную в кавычки, то есть

print -- "$MY_VAR" > outputFile

Print - это ksh major-upgrade для эха, но лучше всего иметь привычкуиспользуя '-' между командой и строками, которые вы хотите print.Любой символ '-' в строке, которую вы хотите напечатать, может бросить незащищенную (т.е. не '-') команду print для цикла.

Возможно, вам также понадобится заключить в кавычки MY_VAR,то есть

MY_VAR="$(sqlplus -s usr/pass@db <<-EOD
set heading off;
set pagesize 0;

select a_value from a_table where an_index = 25;
EOD
)"

Я перешел на EOD, как!char используется многими оболочками для обозначений, таких как! $ (последнее слово предыдущей строки), так что зачем путать вещи.

Примечание на будущее: здесь есть тег для ksh, который вы можете использовать здесь в StackOverflow.Shell является неоднозначным, и может означать Windows cmd.com, а также zsh.

Надеюсь, это поможет.

...