如何指定多行shell变量?(How to specify a multi-line shell v

2019-07-21 17:08发布

我写了一个查询:

function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}

本地SQL - 一个很长的字符串。 查询未格式化。 我怎样才能将一个字符串分解成多行?

Answer 1:

使用read了定界符,如下图所示:

read -d '' sql << EOF
select c1, c2 from foo
where c1='something'
EOF

echo "$sql"


Answer 2:

只需插入新行必要

sql="
SELECT c1, c2
from Table1, Table2
where ...
"

外壳将寻找右引号



Answer 3:

我想给一个附加的应答,而另一个则在大多数情况下足够了。

我想写多行字符串,但其内容必须是单行。

sql="                       \
SELECT c1, c2               \
from Table1, ${TABLE2}      \
where ...                   \
"

我很抱歉,如果这一点,如果有点偏离主题(我并不需要这个SQL)。 然而,这个帖子寻找多行shell变量的时候和一个额外的答案似乎是适当的第一个结果中出现。



Answer 4:

由于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

test.sh

#!/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


Answer 5:

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



文章来源: How to specify a multi-line shell variable?
标签: bash shell