2016-04-26 8 views
-1

bashスクリプトを使用してテキストファイルからmakeコマンドを実行しようとしています。 makeコマンドにはスペースを含むパラメーターがあり、パラメーターの内容を1つとして扱っていません。この場合、二重引用符をどのようにエスケープするのですか?bashから実行されるmakefileコマンドで二重引用符をエスケープする方法

$(エコー "-C ... INSTALL_MOD_STRIP =作る" - のparam-1 --param-2 = .note.gnu.build-ID "ARCH = arm64を...")

でこの場合、INSTALL_MOD_STRIPの二重引用符はechoコマンドの後には考慮されず、--param-two = .note.gnu.build-idはそのようなキーワードの一部とは見なされません。 二重引用符をINSTALL_MOD_STRIP =の内容にエスケープするには、makeコマンドで1つとして扱いますか?

+0

'INSTALL_MOD_STRIP = \ " - PARAM-1 --param-2が= .note.gnu.build-IDの\"' – webb

答えて

0

ここでやろうとしていることを本当に理解できません。文章の目的は何ですか?$(echo foo)fooを直接書いてみませんか?いずれにしても

、理由二重引用符は、あなたの式から消えつつある:引用符(?パーサはそれを行うには知っているだろうか)上記により解析される入れ子にしませんので

echo "make -C ... INSTALL_MOD_STRIP="--param-one --param-two=.note.gnu.build-id" ARCH=arm64 ..." 

することですecho、次に最初の2つの引用符の間のもの:make -C ... INSTALL_MOD_STRIP=、次に引用符で囲まれていない単語--param-one--param-two=.note.gnu.build-id、次に2番目の2つの引用符の間のもの:ARCH=arm64 ...。 、

echo "make -C ... INSTALL_MOD_STRIP=\"--param-one --param-two=.note.gnu.build-id\" ARCH=arm64 ..." 

あるいはさらに良い(内側のコンテンツはすべての変数を持っていない場合)は、外側の引用符のいずれかのように単一引用符を使用するか:あなたは巣にしたい場合は

あなたは、内側の引用符をエスケープする必要が引用します(内容は変数を持っていない場合)、内側の引用符:

echo "make -C ... INSTALL_MOD_STRIP='--param-one --param-two=.note.gnu.build-id' ARCH=arm64 ..." 
+0

問題ではありません引用符をエスケープする。問題は$()を使用するときです。bashスクリプトからこのコマンドを実行し、txtファイルからmake行を取り出すには、echoコマンドが実行前に二重引用符を削除しているように見えます。 – chbarros

+0

私はあなたの説明や切り捨てられた例を理解できないので、実際には、あなたが周囲のコードなどでしようとしているものの実際の例を与えなければなりません。私が言っているのは、 'make ...'を書くだけで '$(echo" make ... ")と書いている理由です。おそらく、余分なシェル呼び出しを取り除いているエスケープ問題のいくつかを削除するのに役立つでしょう。 – MadScientist

関連する問題