【问题标题】:Echo variable using sudo bash -c 'echo $myVariable' - bash script使用 sudo bash -c 'echo $myVariable' 回显变量 - bash 脚本
【发布时间】:2016-05-03 12:35:55
【问题描述】:

我想在 /etc/hosts 文件中回显一个字符串。该字符串存储在名为$myString 的变量中。

当我运行以下代码时,回显为空:

finalString="Hello\nWorld"
sudo bash -c 'echo -e "$finalString"'

我做错了什么?

【问题讨论】:

    标签: bash shell


    【解决方案1】:
    1. 您没有将变量导出到环境中,以便子进程可以获取它。

    2. 你没有告诉sudo保护环境。

    \

    finalString="Hello\nWorld"
    export finalString
    sudo -E bash -c 'echo -e "$finalString"'
    

    或者,您可以使用当前的 shell 替代:

    finalString="Hello\nWorld"
    sudo bash -c 'echo -e "'"$finalString"'"'
    

    【讨论】:

    • 即:使用export 使变量在子shell 中可用。
    • 将变量导出到环境中只是'export finalString'吗?因为它仍然没有打印变量。
    • @user2771150 你可能需要-E in sudo --> sudo -E bash -c 'echo -e "$finalString"'
    • 它们都“安全”吗?有“推荐”的方式吗?对不起。我对 bash 脚本很陌生。
    【解决方案2】:

    你可以这样做:

    bash -c "echo -e '$finalString'"
    

    即使用双引号将参数传递给子shell,因此变量($finalString)按预期扩展(由当前shell)。

    虽然我建议不要将-e 标志与echo 一起使用。相反,您可以这样做:

    finalString="Hello
    World"
    

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 2018-10-01
      • 2012-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2019-02-17
      相关资源
      最近更新 更多