一重引用符と二重引用符を使用して式をエコーする方法は?

一重引用符と二重引用符を使用して式をエコーする方法は?

私はたくさん試しましたが、シェルについては非常に新しいものです。で二重引用符と一重引用符の両方を使用できますか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シェルの外部で行う必要があります。

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')"}"

関連情報