在字符串的字符串中打印变量

在字符串的字符串中打印变量

我不知道如何在字符串的字符串中打印变量。

我一开始没有像这样的变量,它工作得很好:

#!/bin/bash

ssh 1.1.1.1 $'sudo -H -u apache bash -c \'cd ~/html; echo development > stuff.text\''

当我登录到我的服务器时1.1.1.1,我可以看到该文件stuff.text包含单词development.完美的。

然后我制作了这个 bash 脚本:

#!/bin/bash

BRANCH=development
ssh 1.1.1.1 $'sudo -H -u apache bash -c \'cd ~/html; echo ${BRANCH} > stuff.text\''

但是运行这个 bash 脚本会导致一个空stuff.text文件。我也尝试了这些命令,但它们都给出了语法/解析错误:

ssh 1.1.1.1 $`sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'`
ssh 1.1.1.1 ${`sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'`}
ssh 1.1.1.1 ${sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'}
ssh 1.1.1.1 ${"sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'"}

如何在另一个字符串的字符串中写入变量?

答案1

您正在使用不必要的复杂符号。这里根本$不需要,ssh它接受一个在远程服务器上作为命令执行的字符串。您也不需要去cd任何地方。尝试这个:

#!/bin/bash

## avoid CAPS for shell variable names.
branch=development

ssh 1.1.1.1 "sudo -H -u apache bash -c 'echo $branch > ~/html/stuff.text'"

答案2

经过一系列尝试错误后,我发现这是有效的:

#!/bin/bash

BRANCH=development
ssh 1.1.1.1 $"sudo -H -u apache bash -c 'cd ~/html; echo ${BRANCH} > stuff.text'"

development现在我可以看到文件中的单词~/html/stuff.text

相关内容