bash - 转义变量SSH命令而不改变它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash - 转义变量SSH命令而不改变它相关的知识,希望对你有一定的参考价值。

我在bash脚本中运行一个命令,该脚本使用文件内容作为参数。这是一个简化的例子:

USER=$(<$fileA)
PASSWORD=$(<$fileB)
wget -u $USER -p $PASSWORD

但是,文件的内容可以由用户设置为任何值。我认为我需要逃避这一点,但我不知道该怎么做,特别是以一种不会改变$ PASSWORD的方式。否则密码显然不起作用。

谢谢

答案

您可能只需要在变量周围添加引号。

wget -u "$USER" -p "$PASSWORD"

如果您碰巧在变量的末尾捕获换行符,则可能需要将其删除:

wget -u "${USER%$'
'}" -p "${PASSWORD%$'
'}"

${var}语法相当于$var,但花括号允许用bash操作变量。通过在结束大括号之前添加%$' '%意味着删除文本$' ',这意味着删除尾随换行符(如果有的话)。

在最坏的情况下,您可能会获得换行符和回车符(可能是文件是由Windows中的文本编辑器生成的),但您也可以处理它:

wget -u "${USER%%[$'
'$'
']*}" -p "${PASSWORD%%[$'
'$'
']*}"

这一次,搜索到的文本是[$' '$' ']*,意思是“第一个换行符( )或回车符( )和”之后的所有内容“和%%运算符意味着”删除最后的最长序列“。

以上是关于bash - 转义变量SSH命令而不改变它的主要内容,如果未能解决你的问题,请参考以下文章

引用和转义 ssh 命令行 [重复]

玩转Bash变量

玩转Bash变量

复杂的正则表达式 - 在Powershell中工作,而不是在Bash中工作

Vscode在使用变量之前转义斜杠

sh 通常,它建议为bash提供复杂提示的方法是内置读取,可能包括转义序列和shell变量