Почему символ новой строки добавляется к переменной оболочки? - PullRequest
0 голосов
/ 23 декабря 2018

Я использовал метод для присвоения вывода SQL переменной, как показано ниже.

dbRole=$(${SQLPLUSPGM} -s / as sysdba <<-EOF
set head off
set verify off
set feedback off
select trim(translate(database_role,' ','_')) from v\$database;
exit;
EOF
)

Но к переменной o / p добавляется символ "\n", т.е. \nPHYSICAL_STANDBY

Однако, когда я использую приведенный ниже метод, он работает нормально

${SQLPLUSPGM} -s / as sysdba <<-EOF | grep -v '^$' | read dbRole
set head off
set verify off
set feedback off
select trim(translate(database_role,' ','_')) from v\$database;
exit;
EOF

Любое предложение, почему он добавляет `\ n 'и как мы можем от него избавиться.

Ценю ваши предложения.

1 Ответ

0 голосов
/ 23 декабря 2018

Ваш второй метод, с grep -v, удаляет дополнительную строку.Вы можете использовать некоторые фильтры внутри вашего первого метода с дополнительными скобками.

dbRole=$((cat | grep -v "^$") <<-EOF
1
2
3

5

EOF
)

Альтернативные фильтры с некоторыми отличиями: grep ., head -1, sed '$d'.

...