【问题标题】:Can variables be passed inside arguments in Bash [duplicate]变量可以在 Bash 中的参数内部传递吗?
【发布时间】:2021-03-18 09:54:41
【问题描述】:

我的脚本使用 cURL 处理浏览器自动化。我需要发布用户输入用户名。我可以通过像这样对 username 进行硬编码来做到这一点:

# sid -> session Id
# eid -> element Id (input box here)

curl -d '{"value":["username"]}' http://localhost:9515/session/$sid/element/$eid/value

这成功发布用户名,但我想read用户名并将其传递给

我试过了:

read userName
curl -d '{"value":[$userName]}' http://localhost:9515/session/$sid/element/$eid/value

这给了我“缺少命令参数”错误。只传递 $userName 而不是 [$userName] 给出“无效参数:‘值’必须是一个列表”

在这种情况下,如何将变量(用户名)传递给 curl POST 请求?

【问题讨论】:

  • (1) 单引号块参数扩展发生; (2) 为什么你现在的用户名周围有括号,而在命令的原始版本中你没有?
  • @user1934428,我不明白你在 (1) 中所说的内容。我已按照 (2) 中的说明进行了更改。谢谢。
  • 如果有单引号,里面不会发生参数扩展。因此,' ... $userName' 不会扩展 `userName.

标签: bash shell curl


【解决方案1】:

您似乎尝试在单引号内使用变量。尝试使用双引号:

read userName
curl -d "{\"value\":\"${userName}\"}" http://localhost:9515/session/$sid/element/$eid/value

解释:

单引号 (' ') 的操作类似于双引号,但不允许引用变量,因为 $ 的特殊含义已关闭。在单引号内,除 ' 之外的每个特殊字符都按字面意思解释。考虑单引号(“全引号”)是比双引号(“部分引号”)更严格的引用方法。

取自:https://tldp.org/LDP/abs/html/quotingvar.html

【讨论】:

  • ABS 是一个可疑的参考;有很多更好的资源,内容问题更少。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 2012-09-16
  • 2011-11-14
  • 1970-01-01
  • 2011-11-14
  • 2022-01-17
相关资源
最近更新 更多