変数を含む文字列を展開/評価せずにエコーします[終了]


12

私はどこでも検索しました。エコーして印刷してみました。一重引用符と二重引用符を試しました。しかし、私はデータを解析してそれを変数に割り当てたので、その中に変数があるかどうかを評価したいと思います。次に、変数をワイルドカードに置き換えて、ファイルを検索します。

例:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

ここに私の多くの失敗のうちの少なくとも1つがあります:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

私はそれが拡張と関係があることを知っていますが、それをどのように解決するかわかりません。任意の助けいただければ幸いです。ありがとう!


何を解決する必要がありますか?その変数には、展開されていない$date?が含まれています。その使用のために:var='file.$DATE.txt'。varが使用されているときに日付を拡張するには?あなたが求めていることを説明する必要があると私は確信しています。

変数が「var」変数内で定義されているかどうかをテストします。入れ子になっています。
krmarshall87

私はすぐに(私がする必要があることを最初に気にすることなく)、変数のように見える何かを削除し、ワイルドカードでそれを交換することにより、私のジレンマを回避する方法を発見した: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

回答:


20

$date変数varの内部が必要な場合:

var='file.$date.txt'

これにより、変数内に$が保持されます。

$ echo "$var" | grep '\$'
file.$date.txt

8

シェルの展開を防ぐには、変数を単一引用符で囲みます。例echo '$file'は拡張されません$file

以下のコメントの後に編集:

変数の$符号はでエスケープできvarますvar="file.\$DATE.txt"


私はそれを拡張する必要がありますが、1レベルのみです。ステップバイステップの望ましい結果を追加するのを忘れていました。しかし、$ fileの内容をドル記号($ DATE)で評価したいと思います。
krmarshall87

それを解決するために編集されました。
Munir 2016年

そのデータを外部のソースから受け取ります。$を\ $に置き換える場合でも、エコーが必要になると思います。しかし、私はそれを解析していたときに私はそれを絞ることができれば、私は見てみましょう。
krmarshall87
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.