如何回显带有单引号和双引号的表达式?

Aas*_*shu 4 shell echo quoting

我尝试了很多东西,但我是 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 `('
Run Code Online (Sandbox Code Playgroud)

我该怎么写scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}?语法是hbase's,我无法更改它...

编辑

我想在system call 中调用echo。

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

我试过用 $ 但是

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

由于双引号而出错。

Hau*_*ing 7

在bash:

echo $'scan \'LPV\',{FILTER => "(PrefixFilter (\'MP1-Eq1\')"}'
Run Code Online (Sandbox Code Playgroud)

或者

echo "scan 'LPV',{FILTER => \"(PrefixFilter ('MP1-Eq1')\"}'"
Run Code Online (Sandbox Code Playgroud)

对于更长的字符串,这可能是一个更方便的选择:

> cat <<EOT
scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}
EOT
Run Code Online (Sandbox Code Playgroud)

与EOT或\EOT,取决于是否打算使用参数扩展和引号删除(反斜杠)。

使用范围内 awk

在里面定义这个字符串awk会使一切变得更加复杂。这应该awk在 shell外部完成:

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