2009-07-10 5 views
0

bashスクリプトのコマンドに式を含む文字列を含めるにはどうすればよいですか?bashコマンドに文字列式を含める

mysql -e 'SHOW DATABASES' | grep -E -v 'Database|information_schema|mysql' > outfile 

...ので、私は私の構文は、私がしたいコマンド文字列を生成していると思う:画面にスクリプトプリント

#!/bin/bash 
exclusions='Database|information_schema|mysql' 
echo "mysql -e 'SHOW DATABASES' | grep -E -v '$exclusions' > outfile" 
mysql -e 'SHOW DATABASES' | grep -E -v '$exclusions' > outfile 

は、次のことを考えてみましょう。コマンドラインで手動で印刷した文字列を入力すると、grep式以外のすべてのデータベース名が 'outfile'になります。

しかし、スクリプトは、grep式のものを除外せずに、すべてのデータベース名をファイルにエクスポートします。スクリプトがgrep式を見落としているのはなぜですか?

答えて

3

環境変数(およびその他の特殊文字)は、一重引用符で囲まれた文字列内では展開されません。 echo文中の1つは、文字列自体が二重引用符で区切られているためです。その文字列の一重引用符は、区切り文字ではなく文字列の一部です。

bash manualの引用文を参照してください。

2

一重引用符の代わりに二重引用符を使用してください。

mysql -e 'SHOW DATABASES' | grep -E -v "$exclusions" > outfile 
関連する問題