나는 많은 것을 시도했지만 쉘에 대해서는 매우 새로운 것입니다. 에서 큰따옴표와 작은따옴표를 모두 사용할 수 있습니까 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')"}
? 구문은 hbase
s이고 변경할 수 없습니다.
편집하다
전화를 걸고 싶어요에코이내에시스템 호출.
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')"}"