Я написал запрос:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
local sql - очень длинная строка. Запрос не отформатирован. Как я могу разбить строку на несколько строк?
Я написал запрос:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
local sql - очень длинная строка. Запрос не отформатирован. Как я могу разбить строку на несколько строк?
Используйте read
с помощью heredoc, как показано ниже:
read -d '' sql << EOF
select c1, c2 from foo
where c1='something'
EOF
echo "$sql"
просто вставьте новую строку, если необходимо
sql="
SELECT c1, c2
from Table1, Table2
where ...
"
оболочка будет искать закрывающий кавычек
Я хотел бы дать еще один ответ, в то время как другие будут достаточными в большинстве случаев.
Я хотел написать строку по нескольким строкам, но ее содержимое должно быть однострочным.
sql=" \
SELECT c1, c2 \
from Table1, ${TABLE2} \
where ... \
"
Прошу прощения, если это немного не по теме (мне это не нужно для SQL). Однако это сообщение появляется среди первых результатов при поиске многострочных переменных оболочки, и дополнительный ответ представляется подходящим.
Благодаря dimo414 ответ на аналогичный вопрос, это показывает, как работает его отличное решение, и показывает, что вы можете легко использовать цитаты и переменные в тексте:
$ ./test.sh
The text from the example function is:
Welcome dev: Would you "like" to know how many 'files' there are in /tmp?
There are " 38" files in /tmp, according to the "wc" command
#!/bin/bash
function text1()
{
COUNT=$(\ls /tmp | wc -l)
cat <<EOF
$1 Would you "like" to know how many 'files' there are in /tmp?
There are "$COUNT" files in /tmp, according to the "wc" command
EOF
}
function main()
{
OUT=$(text1 "Welcome dev:")
echo "The text from the example function is: $OUT"
}
main
read
не экспортирует переменную (что очень удобно в большинстве случаев). Здесь альтернатива, которая может быть экспортирована в одну команду, может сохранять или отбрасывать переводы строк и позволяет при необходимости смешивать стили цитирования. Работает для bash и zsh.
oneLine=$(printf %s \
a \
" b " \
$'\tc\t' \
'd ' \
)
multiLine=$(printf '%s\n' \
a \
" b " \
$'\tc\t' \
'd ' \
)
Я признаю, что необходимость цитирования делает это уродливым для SQL, но он отвечает на вопрос (более общий) в заголовке.
Я использую его так
export LS_COLORS=$(printf %s \
':*rc=36:*.ini=36:*.inf=36:*.cfg=36:*~=33:*.bak=33:*$=33' \
...
':bd=40;33;1:cd=40;33;1:or=1;31:mi=31:ex=00')
в файле, полученном из моих .bashrc
и .zshrc
.