سؤال

ولدي متغير بيئة يسمى $TEST الذي يشير إلى دليل في بلدي النصي باش لدي متغير يسمى $VARTEST وهو $TEST/dir/file

والآن أريد أن البقرى على الملف المحدد من قبل $VARTEST ولذلك فإنني أحاول القيام به:
grep somestring $VARTEST ولكنه لا يترجم $TEST إلى انها الدليل

ولقد حاولت مجموعات مختلفة من {}، "" و'' ولكن من دون نجاح

هل كانت مفيدة؟

المحلول

وأعتقد أنك تريد

eval grep somestring "$VARTEST"

وأو حتى

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

ولكن تذكر (كما قال آخرون بالفعل): إذا استفادة ممكنة

VARTEST="$TEST/foo/bar"

وبدلا من

VARTEST='$TEST/foo/bar'

واستخدام ثانية واحدة فقط إذا كنت حقا بحاجة الى نوع من "تقييم كسول" ...

وتحذير، وهذا يمكن أن تكون خطيرة إذا $VARTEST يحتوي على رمز malicous.

نصائح أخرى

هل وضع علامات الاقتباس المفردة حول شيء ما؟ سوف علامات الاقتباس المفردة منع المتغيرات من ترجمتها إلى قيمها المطابق. والتنصيص على الرغم من العمل. على سبيل المثال:

#!/bin/sh

TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top