متغير البيئة داخل متغير
-
19-08-2019 - |
سؤال
ولدي متغير بيئة يسمى $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"
لا تنتمي إلى StackOverflow