2017-06-30 17 views
0

私は現在、例えば、いくつかのプログラムを呼び出すスクリプトに取り組んでいます:私が書く場合bashスクリプトのC/C++に#defineと似たものがありますか?

root -l -q Analysis.C+'("var1", "var2", "var3")' 

は、私は今、自動的ただしなどVAR1、VAR2、VAR3、とユーザの入力に取って代わるbashスクリプトをしたいですそれは$ 1とその文字列としてではなく変数としてintrpretsとして

root -l -q Analysis.C+'("$1", "$2", "$3")' 

このようなものは、動作するようには思えません。 C/C++のような#defineに似たものがありますか?実行前にスクリプト全体で変数が置き換えられていますか?またはこれはどのようにしてできますか?

+0

え? 'root -l -q Analysis.C + '(" var1 "、" var2 "、" var3 ");'は有効なコマンドではありません。 –

+2

そのコマンドの対になっていない一重引用符は一部ですか?どのように最終的なテキストを表示したいですか? '$ 1'などを使うことができるはずですが、構文は重要です。作成しようとしている希望のシェルコマンドを表示します。言い換えれば、そのコマンドを3回連続して実行しようとしていますか?1,2,3を連続して実行するか、同じ単一コマンドのすべての部分ですか? – beroe

+0

あなたの例を 'set-one two three; echo root -l -q 'Analysis.C +'( "$ 1"、 "$ 2"、 "$ 3"); '?がんばろう。 – shellter

答えて

2

いいえ、あなたは関係なく、コンテキストを引用の前処理を実行することはできません。シェルでコンテキストを引用する非常にポイントを行うと起こらない置換の種類を制御することがあるためです。一重引用符で起こった置換を定義できれば、一重引用符がシェル内に持つ意味(文字通り扱え、拡張の対象にならない文字)は失われます。言うことです

root -l -q Analysis.C+'("'"$var1"'", "'"$var2"'", "'"$var3"'");' 

この権利を行う

のようなものになり、単一引用符で囲まれたコンテキストを終了し、二重引用符で囲まれたコンテキストは、各パラメータ置換の前に、開始されます。


この効果は、以下に見られることができます。

$ var1=a; var2=b; var3=c 
$ printf '%s\n' root -l -q Analysis.C+'("'"$var1"'", "'"$var2"'", "'"$var3"'");' 
root 
-l 
-q 
Analysis.C+("a", "b", "c"); 
関連する問題