bash 中的变量不起作用

variable in bash not working

我的 bashrc 文件中有一个简单的函数,它有 2 个参数并进行 curl 调用。问题是,curl 请求没有获取变量。这是函数...

checkUserName() {
    cd ~/
    echo "checking for username "
    curl -w "@curl-format.txt" -H "Content-Type: application/json" -X POST -d '{"userName": ""}' http://localhost:8080//verify
}
alias unameCheck=checkUserName

然后我用类似...的方式调用它

unameCheck users danwguy

我会看到...

checking for username danwguy

在我的终端提示中,但是当我从我的应用程序查看我的日志时,它显示它正在检查用户名 $2 因此即使 $1 被替换,该变量也不会在 curl 命令中被替换,因为它在我的本地主机上调用了正确的 API。 它在 echo 命令中取代了它,但在 curl 命令中没有。

我什至尝试创建一个局部变量,但仍然不起作用,无论我做什么,它都不会在 curl 调用中替换,但在 echo 调用中会替换。 谁能看出为什么不能正确替换 $2

参数扩展 ($var) 不会在单引号中扩展。请改用双引号:

$ curl -w "@curl-format.txt" \
    -H "Content-Type: application/json" \
    -X POST \
    -d '{"userName": "'""'"}' \
    "http://localhost:8080//verify"

也将参数扩展用双引号括起来以避免 word splittingpathname expansion.

只是对之前评论的注释。

你可以用反斜杠转义双引号,告诉bash解释器不要解释它的特殊含义,所以最终代码如下:

... -d "{\"userName\": \"\"}"  ...

这对我来说更明显...