【发布时间】:2016-05-03 12:35:55
【问题描述】:
我想在 /etc/hosts 文件中回显一个字符串。该字符串存储在名为$myString 的变量中。
当我运行以下代码时,回显为空:
finalString="Hello\nWorld"
sudo bash -c 'echo -e "$finalString"'
我做错了什么?
【问题讨论】:
我想在 /etc/hosts 文件中回显一个字符串。该字符串存储在名为$myString 的变量中。
当我运行以下代码时,回显为空:
finalString="Hello\nWorld"
sudo bash -c 'echo -e "$finalString"'
我做错了什么?
【问题讨论】:
您没有将变量导出到环境中,以便子进程可以获取它。
你没有告诉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 中可用。
-E in sudo --> sudo -E bash -c 'echo -e "$finalString"'。
你可以这样做:
bash -c "echo -e '$finalString'"
即使用双引号将参数传递给子shell,因此变量($finalString)按预期扩展(由当前shell)。
虽然我建议不要将-e 标志与echo 一起使用。相反,您可以这样做:
finalString="Hello
World"
【讨论】: