【问题标题】:Environment variable within variable变量内的环境变量
【发布时间】:2009-03-16 16:52:42
【问题描述】:

我有一个名为$TEST 的环境变量,它指向一个目录 在我的 bash 脚本中,我有一个名为 $VARTEST 的变量,即 $TEST/dir/file

现在我想 grep $VARTEST 指定的文件,所以我尝试这样做:
grep somestring $VARTEST 但它不会将 $TEST 转换为它的目录

我尝试了 {}""'' 的不同组合,但没有成功

【问题讨论】:

    标签: bash shell environment-variables


    【解决方案1】:

    我想你想要

    eval grep somestring "$VARTEST"
    

    甚至

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

    但请记住(正如其他人已经说过的):如果可能,请使用

    VARTEST="$TEST/foo/bar"
    

    而不是

    VARTEST='$TEST/foo/bar'
    

    仅当您确实需要某种“惰性评估”时才使用第二个...

    警告,如果$VARTEST 包含恶意代码,这可能会很危险。

    【讨论】:

    • 成功了,但是出现了一个新问题,在我的情况下 somestring 是一个包含空格的变量 $SOMESTRING = "some thing" 现在 grep 搜索一些并将事物用作文件名,即“”丢失了
    • 丑,但是用eval grep "\"$SOMESTRING\"" "$VARTEST"
    【解决方案2】:

    你有没有用单引号引起来?单引号将防止变量被翻译成它们对应的值。双引号会起作用。例如:

    #!/bin/sh
    
    TEST="/etc"
    VARTEST="$TEST/passwd"
    grep "$LOGNAME" "$VARTEST"
    

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2014-12-17
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多