我正在使用文件内容作为参数的bash脚本中运行命令。这里是一个简化的示例:
USER=$(<$fileA)
PASSWORD=$(<$fileB)
wget -u $USER -p $PASSWORD
但是,用户可以将文件的内容设置为任何值。我以为我需要逃避这个问题,但是我不知道该怎么做,尤其是在不会更改$ PASSWORD的情况下。否则,密码显然将不起作用。
谢谢
答案 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} }运算符的意思是“删除最后的最长序列”。