4

$TEST私のbashスクリプトのディレクトリを参照するという環境変数があり$VARTESTます $TEST/dir/file

で指定されたファイルをgrepしたい$VARTESTので、実行しようとしましたが、そのディレクトリに
grep somestring $VARTEST変換されません$TEST

と のさまざまな組み合わせを試しましたが{}、成功""しませんでした''

4

2 に答える 2

6

私はあなたが欲しいと思います

eval grep somestring "$VARTEST"

あるいは

VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"

しかし覚えておいてください(他の人がすでに言ったように):可能であれば使用

VARTEST="$TEST/foo/bar"

それ以外の

VARTEST='$TEST/foo/bar'

ある種の「遅延評価」が本当に必要な場合にのみ、2番目のものを使用してください...

警告、$VARTEST悪意のあるコードが含まれている場合、これは危険な場合があります。

于 2009-03-16T17:10:01.127 に答える
1

何かを一重引用符で囲みましたか?一重引用符は、変数が対応する値に変換されるのを防ぎます。ただし、二重引用符は機能します。例えば:

#!/bin/sh

TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"
于 2009-03-16T17:15:28.493 に答える