我写了一个查询:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
本地 sql - 一个很长的字符串。查询未格式化。如何将字符串拆分为多行?
只需在必要时插入新行
sql="
SELECT c1, c2
from Table1, Table2
where ...
"
shell 将寻找右引号
与heredoc一起使用read
,如下所示:
read -d '' sql << EOF
select c1, c2 from foo
where c1='something'
EOF
echo "$sql"
我想给出一个额外的答案,而其他答案在大多数情况下就足够了。
我想在多行上写一个字符串,但它的内容需要是单行的。
sql=" \
SELECT c1, c2 \
from Table1, ${TABLE2} \
where ... \
"
如果这有点离题,我很抱歉(我不需要这个用于 SQL)。但是,在搜索多行 shell 变量时,这篇文章出现在第一个结果中,另外一个答案似乎是合适的。
感谢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')
在来自 my.bashrc
和.zshrc
.