如何使用单引号和双引号回显表达式?

如何使用单引号和双引号回显表达式?

我尝试过很多东西,但我对 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')"}?语法是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在 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')"}"

相关内容