引用符とアスタリスクを含む文字列として保存されたbashコマンドを実行する方法 [重複] 質問する

引用符とアスタリスクを含む文字列として保存されたbashコマンドを実行する方法 [重複] 質問する

次のコマンドを実行してみます:

mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig"

私はそれを文字列に保存します:

cmd="mysql AMORE -u username -ppassword -h localhost -e\"SELECT  host  FROM amoreconfig\""

試して :

echo $cmd
mysql AMORE -u username -ppassword -h localhost -e"SELECT host FROM amoreconfig"

次のように実行してみてください:

$cmd

そして、mysql のヘルプ ページが表示されます:

mysql  Ver 14.14 Distrib 5.1.31, for pc-linux-gnu (i686) using readline 5.1
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
(...)

引用符の使い方が明らかに間違っていると思うのですが、何が問題なのかわかりません。

ベストアンサー1

やってみました:

eval $cmd

*裸の文字列または二重引用符で囲まれた文字列の場合は特別な意味を持つため、どのようにエスケープするかという次の質問については、一重引用符を使用します。

MYSQL='mysql AMORE -u username -ppassword -h localhost -e'
QUERY="SELECT "'*'" FROM amoreconfig" ;# <-- "double"'single'"double"
eval $MYSQL "'$QUERY'"

ボーナス: これも読みやすいです: eval mysql query ;-)

おすすめ記事