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命令而不改变它的主要内容,如果未能解决你的问题,请参考以下文章