작은따옴표와 큰따옴표를 사용하여 표현식을 에코하는 방법은 무엇입니까?

작은따옴표와 큰따옴표를 사용하여 표현식을 에코하는 방법은 무엇입니까?

나는 많은 것을 시도했지만 쉘에 대해서는 매우 새로운 것입니다. 에서 큰따옴표와 작은따옴표를 모두 사용할 수 있습니까 echo?

시스템 호출을 생성하고 싶지만 echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"여러 개의 큰따옴표와 작은따옴표로 인해 오류가 발생합니다.

ftable="echo" " \"" "scan" " " "'LPV',{FILTER => " "\"" "\(" "PrefixFilter ""\(""'MP1-Eq1'" "\)" "\"" "\}" "\" "    
echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"
bash: syntax error near unexpected token `('

어떻게 작성해야 합니까 scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}? 구문은 hbases이고 변경할 수 없습니다.

편집하다

전화를 걸고 싶어요에코이내에시스템 호출.

ftable="echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}" "
system(ftable)
error

$를 시도했지만

ftable="echo $'scan" "\'" "LPV" "\'" ",{FILTER => " "\"" "(PrefixFilter (" "\'" "MP1-Eq1" "\'" ")" "\"" "}' '"
system(ftable)
error

큰따옴표로 인해 오류가 발생합니다.

답변1

존재하다 bash:

echo $'scan \'LPV\',{FILTER => "(PrefixFilter (\'MP1-Eq1\')"}'

또는

echo "scan 'LPV',{FILTER => \"(PrefixFilter ('MP1-Eq1')\"}'"

긴 문자열의 경우 이 옵션이 더 편리할 수 있습니다.

> cat <<EOT
scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}
EOT

매개변수 확장 및 따옴표 제거(백슬래시)가 의도적인지 여부에 따라 또는 EOT또는 입니다 .\EOT

내부용awk

이 문자열을 내부에 정의하면 awk모든 것이 더 복잡해집니다. 이 작업은 awk셸 외부에서 수행되어야 합니다.

ftable=$'echo "scan \'LPV\',{FILTER => "(PrefixFilter (\'MP1-Eq1\')"}"'
# echo "$ftable"
awk -v ftable="$ftable" '... system(ftable); ...'

답변2

큰따옴표 안의 큰따옴표를 이스케이프 처리할 수 있습니다.

$ ftable="echo \"scan 'LPV',{FILTER => \"(PrefixFilter ('MP1-Eq1')\"}\""
$ echo $ftable
echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"

관련 정보