【问题标题】:BASH script with a $ not saving correctly [duplicate]带有 $ 的 BASH 脚本未正确保存 [重复]
【发布时间】:2025-11-29 01:10:02
【问题描述】:

我有一个 bash 脚本,我执行以下操作 sudo ./test

bash 脚本需要创建一个repo,并在其中保存以下数据。

所以,这是 bash 脚本:

#!/bin/bash
echo "Inputing data... " 
echo "[mongodb-org-3.2]
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/" > /etc/yum.repos.d/mongodb-org.repo 

但是,因为 releasever 前面有一个 $,所以脚本会这样保存文本:

[mongodb-org-3.2]
baseurl=https://repo.mongodb.org/yum/redhat//mongodb-org/3.2/x86_64/

而不是这样:

[mongodb-org-3.2]
baseurl=https://repo.mongodb.org/yum/redhat/$c/mongodb-org/3.2/x86_64/

知道如何将$releasever 视为文本而不是变量吗?

我尝试在它周围加上双引号,但这仍然不起作用。我是 bash 脚本的新手,所以任何帮助表示赞赏。

谢谢!

【问题讨论】:

    标签: linux bash shell variables


    【解决方案1】:

    使用单引号来防止变量扩展。

    使用双引号:

    sh-4.1$ baseurl1="https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/"
    sh-4.1$ echo $baseurl1
    https://repo.mongodb.org/yum/redhat//mongodb-org/3.2/x86_64/
    

    使用单引号:

    sh-4.1$ baseurl2='https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/'
    sh-4.1$ echo $baseurl2
    https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
    

    【讨论】:

      【解决方案2】:

      使用反斜杠字符表示您不想调用 bash 变量,例如:

      echo \$HELLO
      

      【讨论】: