2012-03-13 4 views
0

シェルスクリプトでコマンド置換を防ぐ方法はありますか?例えばシェルコマンドの置換を防止する

、スクリプトは次のような行が含まれている場合:私は `エコーfoo`を取得する方法をご希望の

var=`echo foo` 

を。 fooであるコマンドの代用だけではありません。

編集:私はこれらのコマンドを後で評価するために保存しようとしています。私は手動でスクリプトを編集することはできません。私はC/C++プログラムでこれらの値が必要なので、目的を殺すスクリプトを何らかの形で解析しなければならないでしょう(それはまさに私が避けたいものです:スクリプトの解析です)。

編集#2:全状況は、ここで説明:このような変数の束を含んでいる。このシェルスクリプトがあります:など

foo="bar" 
baz=`some_command` 

すべての変数がの右の部分を格納するために私がしたいです式(すなわち、 "bar"と `some_command`)です。私はC/C++プログラムの中からこれをやらなければならないので、スクリプトを手動で編集することはできません(たとえば、一重引用符を追加するなど)。

+0

あなたは何をしようとしていますか? 'eval'のために文字列を「安全」にしたいのであれば、それほど単純ではありません(http://mywiki.wooledge.org/BashFAQ/048)。 – l0b0

+0

スクリプトを解析しているかどうかを確認しますか?あなたは、 '\' echo foo \ ''を 'var = \' echo foo \ ''から取得したいとします。これはC/C++構文ではなくシェル構文のようです。ユーザーがシェルで実行するC/C++プログラムのコマンドを入力していますか? – l0b0

+0

@ l0b0:私は**スクリプトを解析したくないです(それは長くて苦しい方法です)。だから、私は別のプロセスとしてシェルを産み出すことを考えていて、そこにスクリプトを置いていました。したがって、私はいくつかのシェル構文/魔法を探しています。スクリプトを手で編集できないことを示すためにC/C++プログラムについて述べました。 –

答えて

1

文字列を一重引用符で囲む必要があります。

var='`echo foo`' 
+0

このスクリプトを手作業で編集することはできません。私はC/C++プログラムでこれらの値を取得したいので、スクリプトを解析して単一引用符を置く場所を見つけなければなりません。これはまさに私が避けたいものです。 –