我尝试过很多东西,但我对 shell 很陌生。是否可以在 中同时使用双引号和单引号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
在 shell外部完成:
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')"}"