web-dev-qa-db-ja.com

変数を含む文字列を展開/評価せずにエコーする

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

例:

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>

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

11
krmarshall87

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

var='file.$date.txt'

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

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

変数を単一引用符で囲んで、シェルの展開を防ぎます。例_echo '$file'_は_$file_を展開しません。

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

_$_でvar変数の_var="file.\$DATE.txt"_記号をエスケープできます。

8
Munir