[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
.