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)
由于双引号而出错。
在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)