147

私はクエリを書きました:

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

local sql - 非常に長い文字列。クエリがフォーマットされていません。文字列を複数の行に分割するにはどうすればよいですか?

4

5 に答える 5

202

必要に応じて新しい行を挿入するだけです

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

シェルは終了引用符を探します

于 2013-03-15T10:07:10.327 に答える
168

read以下に示すように、ヒアドキュメントで使用します。

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

echo "$sql"
于 2013-03-15T10:04:05.130 に答える
88

ほとんどの場合、他の回答で十分ですが、追加の回答を1つ提供したいと思います。

文字列を複数行に渡って書きたかったのですが、その内容は 1 行である必要がありました。

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

これが少しトピックから外れている場合は申し訳ありません(SQLにはこれは必要ありませんでした)。ただし、複数行のシェル変数を検索すると、この投稿が最初の結果に表示され、追加の回答が適切であると思われました。

于 2014-05-22T08:24:57.043 に答える
6

同様の質問に対する 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
于 2016-02-22T15:44:27.277 に答える