【问题标题】:Could we do dynamic replace in bash shell?我们可以在 bash shell 中进行动态替换吗?
【发布时间】:2015-07-08 17:17:48
【问题描述】:

这里我们在 bash shell 中有 2 个变量

ID="ABC"

ID_STRING="Here is the [${ID}]"

有没有什么方法可以动态地将 ID_STRING 中的 var ${ID} 替换为“ABC”并回显到 concole?

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    如果我正确理解了问题,则 ID_STRING 变量在回显到屏幕时包含文字字符串 ${ID} 并且未按照您在问题中显示的方式分配 - 按照您在问题中的方式分配使用双引号意味着 ID_STRING 变量实际上永远不会包含文字字符串 ${ID} 因为使用双引号,变量替换是在分配时完成的。所以首先:要将文字字符串 ${ID} 放入 ID_STRING 中,您需要使用单引号。第二:您需要在回显时重新评估 ID_STRING。我这样做($ 是 bash 提示符):

    $ ID=ABC
    $ echo $ID
    ABC
    
    $ ID_STRING='Here is the [${ID}]'
    $ echo $ID_STRING
    Here is the [${ID}]
    
    $ eval echo $ID_STRING
    Here is the [ABC]
    
    $ echo $ID, $ID_STRING, `eval echo $ID_STRING`
    ABC, Here is the [${ID}], Here is the [ABC]
    

    【讨论】:

      【解决方案2】:

      你想用字符串替换${ID}

      ID="ABC"
      sed 's/\${ID}/'$ID'/' filename
      

      输出:

      ID_STRING="Here is the "[ABC]"
      

      如果您想在将字符串分配给ID_STRING 时使用ID 的值,您可以使用:

      ID="ABC"
      ID_STRING="Here is the [$ID]"
      

      现在:

      echo $ID_STRING
      

      给予

      Here is the [ABC]
      

      【讨论】:

        【解决方案3】:
        sed -i -e 's/old/new/g' file
        

        基本上是你需要的,输出变化看看here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-17
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多