어떻게 하면 이중 따옴표 안에서 이중 따옴표를 피할 수 있습니까?
Bash에서 이중 문자열 내부의 이중 따옴표를 탈출하려면 어떻게 해야 합니까?
예를 들어 내 셸 스크립트에서
#!/bin/bash
dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"
나는 그것을 얻을 수 없습니다.ENCLOSED BY '\"'
이중 따옴표를 사용하여 올바르게 탈출할 수 있습니다.변수를 사용하려고 하므로 변수에 단일 따옴표를 사용할 수 없습니다.$dbtable
.
백슬래시 사용:
echo "\"" # Prints one " character.
셸에서 이스케이프 따옴표의 간단한 예:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
이미 열어놓은 것을 마무리하는 것으로 완성됩니다 ('
), 이스케이프된 것을 배치).\'
), 그리고 나서 다른 것을 엽니다('
).
또는 다음과 같습니다.
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
이미 오픈한 것을 마무리하는 것으로 완성됩니다 ('
), 다른 인용문에 인용문을 삽입합니다("'"
), 그리고 나서 다른 것을 엽니다('
).
기타 예: 단일 따옴표 문자열 내의 단일 따옴표 이스케이프
에코해야 하는 문자의 ASCII 코드를 사용하면 이스케이프를 피할 수 있습니다.
예:
echo -e "This is \x22\x27\x22\x27\x22text\x22\x27\x22\x27\x22"
This is "'"'"text"'"'"
\x22
는 큰따옴표와 큰따옴표의 ASCII 코드(16진수)입니다.\x27
단문의 경우에는마찬가지로 모든 문자를 반향할 수 있습니다.
위의 문자열을 백슬래시로 메아리치려고 하면, 뒤로 메아리치는 지저분한 두 줄의 메아리가 필요할 것 같습니다.:)
변수 할당의 경우 다음과 같습니다.
a=$'This is \x22text\x22'
echo "$a"
# Output:
This is "text"
변수가 다른 프로그램에서 이미 설정되어 있는 경우에도 sed 또는 유사한 도구를 사용하여 이중/단일 따옴표를 적용할 수 있습니다.
예:
b="Just another text here"
echo "$b"
Just another text here
sed 's/text/"'\0'"/' <<<"$b" #\0 is a special sed operator
Just another "0" here #this is not what i wanted to be
sed 's/text/\x22\x27\0\x27\x22/' <<<"$b"
Just another "'text'" here #now we are talking. You would normally need a dozen of backslashes to achieve the same result in the normal way.
Bash를 사용하면 문자열을 인접하게 배치할 수 있습니다. 그러면 문자열이 접착됩니다.
그래서 이것은:
echo "Hello"', world!'
생산물
Hello, world!
이 방법은 필요에 따라 단일 따옴표로 묶은 문자열과 이중 따옴표로 묶은 문자열을 번갈아 사용하는 것입니다.불행하게도, 그것은 빠르게 매우 지저분해집니다.예:
echo "I like to use" '"double quotes"' "sometimes"
생산물
I like to use "double quotes" sometimes
예를 들어 다음과 같은 작업을 수행할 수 있습니다.
dbtable=example
dbload='load data local infile "'"'gfpoint.csv'"'" into '"table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '"'"'"' LINES "'TERMINATED BY "'"'\n'"'" IGNORE 1 LINES'
echo $dbload
다음과 같은 출력을 생성합니다.
load data local infile "'gfpoint.csv'" into table example FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "'\n'" IGNORE 1 LINES
여기서 무슨 일이 일어나고 있는지 보기는 어렵지만 유니코드 인용문을 사용하여 주석을 달 수 있습니다.다음은 Bash에서 작동하지 않습니다. 단지 설명을 위한 것입니다.
dbload=
‘load data local infile "
’“'gfpoint.csv'
”‘" into
’“table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '
”‘"
’“' LINES
”‘TERMINATED BY "
’“'\n'
”‘" IGNORE 1 LINES
’
위의 "' '와 같은 인용문은 bash로 해석됩니다.인용문은 다음과 같습니다." '
결과 변수가 될 것입니다.
앞의 예를 동일하게 처리하면 다음과 같습니다.
echo
“I like to use
”
‘"double quotes"
’
“sometimes
”
큰따옴표 문자를 변수에 저장합니다.
dqt='"'
echo "Double quotes ${dqt}X${dqt} inside a double quoted string"
출력:
Double quotes "X" inside a double quoted string
printf를 확인합니다...
#!/bin/bash
mystr="say \"hi\""
printf를 사용하지 않음
echo -e $mystr
출력: "안녕"이라고 말합니다.
printf 사용
echo -e $(printf '%q' $mystr)
출력: \"안녕\"이라고 말합니다.
$"string"을 사용합니다.
이 예에서는 다음과 같습니다.
dbload=$"load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"
참고(man 페이지에서):
달러 기호($"string") 앞에 큰따옴표로 묶인 문자열을 사용하면 현재 로케일에 따라 문자열이 변환됩니다.현재 로케일이 C 또는 POSIX인 경우 달러 기호는 무시됩니다.문자열이 변환되고 교체되는 경우 교체는 이중 따옴표로 묶입니다.
Bash 스크립트에 공백이 포함될 수 있는 변수와 함께 사용하려면 주 따옴표 안에 다음과 같은 세 개의 따옴표를 사용합니다.
[ "$(date -r """$touchfile""" +%Y%m%d)" -eq "$(date +%Y%m%d)" ]
더하다"\"
를 붙이기 에, 을피위이인전용에중대신해것, ▁of▁before▁double,.\
#! /bin/csh -f
set dbtable = balabala
set dbload = "load data local infile "\""'gfpoint.csv'"\"" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '"\""' LINES TERMINATED BY "\""'\n'"\"" IGNORE 1 LINES"
echo $dbload
# load data local infile "'gfpoint.csv'" into table balabala FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "''" IGNORE 1 LINES
언급URL : https://stackoverflow.com/questions/3834839/how-can-i-escape-a-double-quote-inside-double-quotes
'programing' 카테고리의 다른 글
콘솔 대신 파일에 로그하도록 Node.js 구성 (0) | 2023.05.12 |
---|---|
Azure: Azure에서 배포된 파일을 볼 수 있는 방법이 있습니까? (0) | 2023.05.12 |
언제 'npm start'를 사용하고 언제 'ng serve'를 사용합니까? (0) | 2023.05.12 |
ASP에서 현재 도메인 이름을 가져오는 방법.그물 (0) | 2023.05.12 |
구성요소로 각진 2개의 테이블 행 (0) | 2023.05.07 |