2016-10-31 13 views
1

私は以前のコマンドの出力を受け取り、新しいコマンドに挿入するbashスクリプトで実行する必要があるコマンドがあります。例えばのでbashスクリプトで変数を引用する方法

VARIABLE=$(cat "file.txt" | grep "text")

その後別のコマンドでその変数を使用します。

mycommand -p "$VARIABLE"

キャッチは$変数はいつも私が必要とする特殊文字、つまり$および/含まれていますです特殊文字はリテラルなので、一重引用符で囲む必要があります。

私は\""$VARIABLE"\"を試しましたが動作しませんでした。

私が達成しようとしているのは、私の検索語が含まれているテキストファイルから一意の行を取得する必要があるということです。

次に、その行を入力する必要があります(その半分、私も行をカットし、後半を使用しています)を別のコマンドに入力する必要があります。後で変数をエコーすることで検証したテキストを正常に取得できます。問題は変数に特殊文字として解釈されている$と\が含まれていることです。例えば

:単一なし

my command -p $345$randomtext\.moretext

はエラーをスローし、それが解釈される変数を引用します。

+0

私は試してみるが、モバイルで作業しても正しくフォーマットされなかった。 – jcalton88

+0

'printf"%s \ n "myコマンド-p" $ VARIABLE "は特殊文字が解釈されていることを示していますか? – muru

+2

あなたの質問の前提は間違っています。もし 'VARIABLE'が' $ 345 $ randomtext \ .moretext'に設定されていれば、 'myコマンド-p" $ VARIABLE "は' myコマンド-p '$ 345 $ randomtext \ .moretext''(必要に応じて) * myコマンド-p $ 345 $ randomtext \ .moretextには*しないでください。だから問題は 'my command'の定義のどこかにあるはずです。 – ruakh

答えて

3

あなたは(私が正しく文字化けのフォーマットを解析してると仮定して)それをここに書かれているように動作する必要がある場合:

VARIABLE=`cat "file.txt" | grep "text"` 
mycommand -p "$VARIABLE" 

ヌル以外の検索結果で特殊文字を扱う問題(これがある場合シェル変数に格納することはできません)、それはほとんど確実に、それが呼び出される方法ではなく、mycommandで誤って処理されているためです。ここでは例です:

$ cat file.txt 
There are some $special \characters\\\\ in this text file. 
This is another line of text. 
$text $VARIABLE $HOME etc. 
$ VARIABLE=`cat "file.txt" | grep "text"` 
$ printargs -p "$VARIABLE" 
Got 2 arguments: 
    '-p' 
    'There are some $special \\characters\\\\\\\\ in this text file.\nThis is another line of text.\n$text $VARIABLE $HOME etc.' 

printargsはそれがどのようなので、その引数の神託の表現を出力する簡単なPythonプログラムが(それは「\ nの」とバックスラッシュのすべてを倍増し、改行を印刷していることに注意され「)Python文字列にそれらを書くD:

#!/usr/bin/python 

import sys 

print "Got", len(sys.argv)-1, "arguments:" 
for arg in sys.argv[1:]: 
    print " " + repr(arg) 

ところで、私は文体の提案のカップルを持っている:$PATHに割り当てる特別な意味(例えばを持っている環境変数との競合を避けるために、シェル変数の小文字の名前を使用することはつながりますトラブルへ)。またcat file | grep patternは​​3210です。ちょうどgrep pattern fileを使用してください。

+0

これはmycommandにあるかもしれません(私のコマンドではありませんが、それは別のプログラム用の組み込みコマンドです)。後続のコマンドを 'mycommand -p '$ 345 $ randomtext \ .moretext'として手動で実行すると、正常に実行されます。私は、それがシェルであった場合には、mycommandではなく、解釈にボットしていると仮定しました。 – jcalton88

+0

私も変数の命名に同意し、私はそれを調整します。猫の使用に関しては、スクリプトを書いてから長いことがありました。ps auxから何かが実行されているかどうかをチェックし、常にgrepにパイプするときは、grepしか使用しませんでした。私は習慣が持ち越されたと思うし、私は忘れてしまった、あるいは私がgrepをそのように使うことができるかどうか分からなかった。ありがとう! – jcalton88

+0

私は今日昨日とは違って何をしたのか分かりませんが、変数を二重引用符で囲むだけでうまくいきました。私は昨日同じことをしましたが、私のトラブルシューティングの際に何か変わったのでしょうか、おそらく変数をどうやって得ていたのでしょうか。 これは正しいので、これを回答として選択します。 – jcalton88

関連する問題