[bash] 여러 줄 셸 변수를 지정하는 방법은 무엇입니까?

쿼리를 작성했습니다.

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

로컬 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

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변수를 내 보내지 않습니다 (대부분의 경우 좋은 일입니다). 여기에 하나의 명령으로 내보낼 수 있고, 줄 바꿈을 유지하거나 삭제할 수 있으며 필요에 따라 인용 스타일을 혼합 할 수있는 대안이 있습니다. 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.


답변