bash-转义变量SSH命令而无需对其进行更改

时间:2018-09-01 21:52:19

标签: bash variables command-line escaping

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

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

但是,用户可以将文件的内容设置为任何值。我以为我需要逃避这个问题,但是我不知道该怎么做,尤其是在不会更改$ PASSWORD的情况下。否则,密码显然将不起作用。

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

如果您碰巧在变量末尾捕获了换行符,则可能要使用以下命令将其删除:

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

${var}语法与$var等效,但是花括号允许使用bash操纵变量。通过在结尾的花括号前添加%$'\n'%意味着删除文本$'\n',这意味着删除尾随的换行符。

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

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

这一次,搜索到的文本为[$'\n'$'\r']*,这意味着“第一行换行(\n)或回车符(\r)及其后的所有内容”和{{1} }运算符的意思是“删除最后的最长序列”。