如何指定一个多行shellvariables?
我写了一个查询:
function print_ui_hosts { local sql = "select ........." print_sql "$ sql" }
本地sql – 一个很长的string。 查询未格式化。 我怎样才能把一个string分成多行?
使用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 ... "
shell将寻找收盘引号
我想再给出一个答案,而其他答案在大多数情况下就足够了。
我想写一个string在多行,但其内容需要是单行的。
sql=" \ SELECT c1, c2 \ from Table1, ${TABLE2} \ where ... \ "
我很抱歉,如果这有点偏离主题(我不需要这个SQL)。 然而,当search多行shellvariables时,这个post出现在第一个结果中,而另一个答案似乎是合适的。
感谢dimo414对类似问题的回答 ,这显示了他伟大的解决scheme是如何工作的,并且表明您可以轻松地在文本中引用引号和variables:
示例输出
$ ./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
read
不会导出variables(这在大多数情况下是好事)。 这是一个可以在一个命令中导出的替代scheme,可以保留或丢弃换行符,并允许根据需要混合引用样式。 适用于bash和zsh。
oneLine=$(printf %s \ a \ " b " \ $'\tc\t' \ 'd ' \ ) multiLine=$(printf '%s\n' \ a \ " b " \ $'\tc\t' \ 'd ' \ )
我承认引用的必要性使得这个SQL很丑陋,但它回答了标题中的(更普遍expression的)问题。
我这样使用它
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
。